DELPHI参数几个概念上的区别 收藏
 引用参数:

引用参数用var关键字标示

procedure DoubleTheValue (var Value: Integer);
begin
  Value := Value * 2;
end;在这种情况下,参数既把一个值传递给过程,又把新值返回给调用过程的代码。当你执行完以下代码时:

var
  X: Integer;
begin
  X := 10;
  DoubleTheValue (X);x变量的值变成了20,因为过程通过引用访问了X的原始存储单元,由此改变了X的初始值 在C++中, 引用用&表示

值得注意的是:

Delphi 3增加了一种新的参数:out。out参数没有初始值,只是用来返回一个值。out参数应只用于COM过程和函数,一般情况下最好使用更有效的var参数。除了没有初始值这一点之外,out参数与var参数相同。

常量参数

和C++一样,用CONST关键字表示

function DoubleTheValue (const Value: Integer): Integer

编译器会选用一种与引用参数相似的方法编译常参(C++术语中的常量引用),但是从表面上看常参又与值参相似,因为常参初始值不受例程的影响。

开放数组参数

与C语言不同,Pascal 函数及过程的参数个数是预定的。如果参数个数预先没有确定,则需要通过开放数组来实现参数传递。

一个开放数组参数就是一个固定类型开放数组的元素。 也就是说,参数类型已定义,但是数组中的元素个数是未知数。

function Sum (const A: array of Integer): Integer;类型变化的开放数组参数

除了类型固定的开放数组外,Delphi 还允许定义类型变化的甚至无类型的开放数组。这种特殊类型的数组元素可随意变化,能很方便地用作传递参数。

技术上,array of const 类型的数组就能实现把不同类型、不同个数元素组成的数组一下子传递给例程

function Format (const Format: string; const Args: array of const): string;N := 20;
S := 'Total:';
Label1.Caption := Format ('Total: %d', [N]);
Label2.Caption := Format ('Int: %d, Float: %f', [N, 12.4]);
Label3.Caption := Format ('%s %d', [S, N * 2]);

但我们往往会遇到这样的问题:

在FUN()中传入 var a: array of integer 参数之后
不能在函数里SetLength(a,num);

所以我们把参数设为动态数组类型

type

tarrayofinteger = array of integer;

procedure grow( var data: tarrayofinteger );

begin

setlength( data, length(data) ,   新长度 );

// 动态数组作为参数可以改变数组大小。

end;

参考BLOG:

http://hi.baidu.com/broland/blog/item/0ab119f516b4ade57609d75c.html

参考文献:

<PASCAL精要>

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jqandjq/archive/2010/03/02/5339123.aspx

DELPHI参数几个概念上的区别 收藏相关推荐

  1. 云计算与springCloud概念上的区别

    根据[1]云计算包含下面三个部分: 服务 案例 IaaS 云存储,百度网盘 PaaS 底层硬件和操作系统 SaaS Web如电子邮件等(不一定连外网,也可以是局域网的应用) 百度网盘其实用到了web界 ...

  2. Texture(纹理贴图)和Material(材质)概念上的区别

    我的理解是:纹理更偏向于"图",而材质更偏向于"属性". 打个比方说,对同一个立方体模型进行处理: 加纹理信息,可以认为是贴上图,比如木头的纹理图,大理石的纹理 ...

  3. 【机器学习小常识】“parameters(参数)” 与 “hyperparameters(超参数)”的概念及区别详解

    目录 1.参数与超参数概念 1.什么是参数 2.什么是超参数 2.二者有什么区别 1.得到方式不同 2.影响因素不同 3.可控程度不同 说在前面的话 有些概念其实,很纠结,它到底是属于机器学习呢,还是 ...

  4. Java中抽象类和接口在概念、语法和应用上的区别和关系

    2019独角兽企业重金招聘Python工程师标准>>> 春招开始了,盆友们都忙着准备笔试.准备面试,复习学过的知识点,当然我也不例外,在这里祝每一个"有心人"心想 ...

  5. GET请求和POST请求有什么区别?GET请求的参数在URL的问号后面显示,而POST参数不在URL上;POST可以比GET请求更大的数据…一般的回答都是这样。 但是作为一个高端大气上档次的程序

    GET请求和POST请求有什么区别?GET请求的参数在URL的问号后面显示,而POST参数不在URL上:POST可以比GET请求更大的数据-一般的回答都是这样. 但是作为一个高端大气上档次的程序员,这 ...

  6. 【Java程序设计】类与对象的基本概念(上)

    类与对象的基本概念(上) 文章目录 类与对象的基本概念(上) 一.面向对象的基本概念 (1)面向对象程序设计&结构化程序设计 1.结构化程序设计 2.面向对象程序设计 (2)面向对象方法的特性 ...

  7. 面试:说说参数验证 @Validated 和 @Valid 的区别?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | blog.csdn.net/qq_276803 ...

  8. 参数验证 @Validated 和 @Valid 的区别,Java Web 开发必备。

    Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303 规范,是标准 JSR-303 的一个变种),javax提供了@Valid(标准J ...

  9. Spring Validation验证框架参数验证 @Validated 和 @Valid 的区别

    参数验证 @Validated 和 @Valid 的区别 Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303 规范,是标准 JSR- ...

最新文章

  1. 蓝绿部署、金丝雀发布(灰度发布)、AB测试……
  2. MySQL的分表和分区介绍
  3. centos7 yum 安装 python3
  4. 牛客(35)数组中的逆序对
  5. 前端性能优化:当页面渲染遇上边缘计算
  6. C#中控件如何设置透明色
  7. 基础002_V7-CLB
  8. 【DP】剪草(jzoj 1510)
  9. 【渝粤教育】国家开放大学2018年春季 0222-22T模拟电子电路 参考试题
  10. 计算机各种硬盘的规格,硬盘规格参数表大全
  11. python列表元祖字典集合运算_Python基础5:列表 元祖 字典 集合 Json
  12. opengl es3.0游戏开发学习笔记1-绘制旋转的三角形
  13. 基于java的enigma的加密程序
  14. T410与T410i有什么区别?
  15. hugepage oracle 12c,Huge page使用的一些问题
  16. 雪崩效应 (密码学术语)
  17. Angular读取文件内容并显示
  18. UE4项目聚集—为所有创意人开放的虚幻引擎
  19. 1987 三 比尔·哈利 Bill Haley
  20. vue v-for 中 img图片渲染不出来的解决方法

热门文章

  1. 可以响应各个方向CompoundDrawables点击操作的TextView的使用
  2. 杭电1597_find the nth digit
  3. poj 2288(状态压缩dp + TSP问题)
  4. NYOJ 336 子序列
  5. 浅入深出Vue:文章编辑
  6. 简介(CAB和SCSF编程)
  7. 频繁项集挖掘之Aprior和FPGrowth算法
  8. 剑指offer-99.调整数组顺序使奇数位于偶数前面
  9. 华东交通大学2017年ACM双基程序设计大赛题解
  10. BufferedReader 中的 readLine()