DELPHI参数几个概念上的区别 收藏
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参数几个概念上的区别 收藏相关推荐
- 云计算与springCloud概念上的区别
根据[1]云计算包含下面三个部分: 服务 案例 IaaS 云存储,百度网盘 PaaS 底层硬件和操作系统 SaaS Web如电子邮件等(不一定连外网,也可以是局域网的应用) 百度网盘其实用到了web界 ...
- Texture(纹理贴图)和Material(材质)概念上的区别
我的理解是:纹理更偏向于"图",而材质更偏向于"属性". 打个比方说,对同一个立方体模型进行处理: 加纹理信息,可以认为是贴上图,比如木头的纹理图,大理石的纹理 ...
- 【机器学习小常识】“parameters(参数)” 与 “hyperparameters(超参数)”的概念及区别详解
目录 1.参数与超参数概念 1.什么是参数 2.什么是超参数 2.二者有什么区别 1.得到方式不同 2.影响因素不同 3.可控程度不同 说在前面的话 有些概念其实,很纠结,它到底是属于机器学习呢,还是 ...
- Java中抽象类和接口在概念、语法和应用上的区别和关系
2019独角兽企业重金招聘Python工程师标准>>> 春招开始了,盆友们都忙着准备笔试.准备面试,复习学过的知识点,当然我也不例外,在这里祝每一个"有心人"心想 ...
- GET请求和POST请求有什么区别?GET请求的参数在URL的问号后面显示,而POST参数不在URL上;POST可以比GET请求更大的数据…一般的回答都是这样。 但是作为一个高端大气上档次的程序
GET请求和POST请求有什么区别?GET请求的参数在URL的问号后面显示,而POST参数不在URL上:POST可以比GET请求更大的数据-一般的回答都是这样. 但是作为一个高端大气上档次的程序员,这 ...
- 【Java程序设计】类与对象的基本概念(上)
类与对象的基本概念(上) 文章目录 类与对象的基本概念(上) 一.面向对象的基本概念 (1)面向对象程序设计&结构化程序设计 1.结构化程序设计 2.面向对象程序设计 (2)面向对象方法的特性 ...
- 面试:说说参数验证 @Validated 和 @Valid 的区别?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | blog.csdn.net/qq_276803 ...
- 参数验证 @Validated 和 @Valid 的区别,Java Web 开发必备。
Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303 规范,是标准 JSR-303 的一个变种),javax提供了@Valid(标准J ...
- Spring Validation验证框架参数验证 @Validated 和 @Valid 的区别
参数验证 @Validated 和 @Valid 的区别 Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303 规范,是标准 JSR- ...
最新文章
- 蓝绿部署、金丝雀发布(灰度发布)、AB测试……
- MySQL的分表和分区介绍
- centos7 yum 安装 python3
- 牛客(35)数组中的逆序对
- 前端性能优化:当页面渲染遇上边缘计算
- C#中控件如何设置透明色
- 基础002_V7-CLB
- 【DP】剪草(jzoj 1510)
- 【渝粤教育】国家开放大学2018年春季 0222-22T模拟电子电路 参考试题
- 计算机各种硬盘的规格,硬盘规格参数表大全
- python列表元祖字典集合运算_Python基础5:列表 元祖 字典 集合 Json
- opengl es3.0游戏开发学习笔记1-绘制旋转的三角形
- 基于java的enigma的加密程序
- T410与T410i有什么区别?
- hugepage oracle 12c,Huge page使用的一些问题
- 雪崩效应 (密码学术语)
- Angular读取文件内容并显示
- UE4项目聚集—为所有创意人开放的虚幻引擎
- 1987 三 比尔·哈利 Bill Haley
- vue v-for 中 img图片渲染不出来的解决方法