面试-默认参数(传值)、var(传址)、out(输出)、const(常数)
相关资料:
1.http://blog.csdn.net/rznice/article/details/6960011
2.http://www.cnblogs.com/echomyecho/archive/2012/03/04/2379077.html
一、默认参数(传值)
1.默认参数是传值, 不会被改变
2.方法创建了一个新的AValue,而输出的还是原来的AValue,值并没有改变
function MyF1(AValue: Integer): Integer;
begin
Inc(AValue);
Result := AValue;
end;
二、var(传址)
1.var参数是传址, 会被改变
function MyF2(var AValue: Integer): Integer;
begin
Inc(AValue);
Result := AValue;
end;
三、out(输出)
1.out参数是为支持Com的, 和 var 的结果是一样的, 一般我们用不着它
2.对out的任何输入都会被忽略。
3.同时out传递给过程的实际参数不必进行初始化
function MyF3(out AValue: Integer): Integer;
begin
Inc(AValue);
Result := AValue;
end;
四、const(常数)
1.const参数是绝对不可以赋值的, 这是被编译器优化的方式, 尽量多用
2.Const修饰的参数传入之后不允许修改如果在过程中修改参数会报错
function MyF4(const AValue: Integer): Integer;
begin
//Inc(AValue); //这句会出错。
Result := AValue;
end;
//调用测试
procedure TForm1.Button1Click(Sender: TObject);
var
n: Integer;
begin
n := 1; MyF1(n);
ShowMessage(IntToStr(n)); //1
n := 1; MyF2(n);
ShowMessage(IntToStr(n)); //2
n := 1; MyF3(n);
ShowMessage(IntToStr(n)); //2
n := 1; MyF4(n);
ShowMessage(IntToStr(n)); //1
end;
//****************** 以下是传对象为例 ******************************//
1.自定义对象
type
TMyClass = class
FID: Integer;
FName: string;
end;
2.定义函数
function SetValue1(AMyClass: TMyClass): Boolean;
begin
AMyClass.FID := 1;
AMyClass.FName := 'ZJQ1';
end;
function SetValue2(var AMyClass: TMyClass): Boolean;
begin
AMyClass.FID := 1;
AMyClass.FName := 'ZJQ2';
end;
function SetValue3(out AMyClass: TMyClass): Boolean;
begin
AMyClass.FID := 1;
AMyClass.FName := 'ZJQ3';
end;
function SetValue4(const AMyClass: TMyClass): Boolean;
begin
AMyClass.FID := 1;
AMyClass.FName := 'ZJQ4';
end;
3.结果情况
procedure TForm2.Button1Click(Sender: TObject);
var
MyClass: TMyClass;
begin
MyClass := TMyClass.Create;
SetValue1(MyClass);//地址32264000
ShowMessage(MyClass.FName);//zjq1
SetValue2(MyClass);//地址32264000
ShowMessage(MyClass.FName);//zjq2
SetValue3(MyClass);//地址32264000
ShowMessage(MyClass.FName);//zjq3
SetValue4(MyClass);//地址32264000
ShowMessage(MyClass.FName);//zjq4
end;
面试-默认参数(传值)、var(传址)、out(输出)、const(常数)的更多相关文章
- Java方法传递参数传值还是传址的问题
这几天重构项目代码遇到一个疑问:可不可以在方法A中定义一个boolean变量b为false,然后A调用方法C把b传递到C方法中经过一些列业务判断后修改为true,C执行结束后A方法中b的值还是原来的f ...
- delphi 函数参数传递 默认参数(传值)、var(传址)、out(输出)、const(常数)四类
参数可以分为: 默认参数(传值).var(传址).out(输出).const(常数)四类 {默认参数是传值, 不会被改变} function MyF1(x: Integer): Integer; be ...
- javascript的变量,传值和传址,参数之间关系
先把收获晾一下: 1.javascrip变量包含两种类型的值,一种为引用类型的值,一种是基本类型的值.引用类型包括:Array,Object,Function(可以这么理解,非基本类型的都是引用类型) ...
- js- 引用和复制(传值和传址)
js- 引用和复制(传值和传址) 好像一般很少人讲到js中的引用和复制,不过弄清楚这个概念可以帮助理解很多东西 先讲一下很基础的东西,看看js中几种数据类型分别传的什么引用:对象.数组.函数复制:数字 ...
- 图解JS的传值与传址
//编程过程中经常会碰到传值,传址的问题!今天的主题就是关于传值.与传址. //先讲讲赋值操作 //下例是原始类型赋值操作 var a=1,b=a,a=2; console.log("a=& ...
- javascript . 05 json的组成、for...in 遍历对象、简单数据类型与复杂数据类型的传值与传址、内置对象
对象字面量 JSON var obj = { aaa :999}; var json={"aaa":999,"bbb":888}; "kay&quo ...
- 再谈js传值和传址
js的传值和传址还是真绕,前回文说道 1.值类型是传值的 2.对象和数组是传址的 这两点通过例子的到了证实 然而还有一种情况没有讨论 即 函数的参数的传值和传址 通过实验,在函数中用一个新对象去覆盖传 ...
- Java传值和传址
调用函数时,传的参数过去可能是传值,也可能是传址.如果是传值,函数内部的操作对参数的值没有影响:如果是传址,函数内部的操作是对参数指向的内存进行操作,会影响参数的值. Java到底是传值还是传址?用下 ...
- js 的复制和引用 (传值和传址)
复制(传值-实参): 基本类型赋值.函数参数 引用(传址-形参): 对象.数组.函数
随机推荐
- java中的Checked Exception和Unchecked Exception的区别
Java 定义了两种异常: - Checked exception: 继承自 Exception 类是 checked exception.代码需要处理 API 抛出的 checked excepti ...
- top(topas),vmstat,iostat在linux和AIX操作系统下显示情况
top(topas),vmstat,iostat在linux和AIX操作系统下显示情况 分类: Linux基础 2013-08-09 17:26 1093人阅读 评论(0) 收藏 举报 详细列出各命令 ...
- js hasChildNodes()指针对元素节点子节点多个的话 true
<select multiple size="2"> <option value="bj">北京</option> < ...
- 腾讯开放平台 iOS应用URL schema、Bundle ID填写 (含微博、微信)
解释如下: qq比较麻烦点,需要两个 URL schemes 1.QQ+appID(注意:appID原本是10进制的,需要先转换16进制,网址:点击转换16进制) 2.tencent+appID 结束
- 【LeetCode】41. First Missing Positive (3 solutions)
First Missing Positive Given an unsorted integer array, find the first missing positive integer. For ...
- 【JAVA】Exception in thread "main" java.lang.NoClassDefFoundError
java新手经常会遇到这个问题. 环境变量配置正确,eclipse下可以正常编译运行,命令行下可以使用javac生成.class文件,但是在当前目录运行的时候提示: 分析报错,可以发现系统从Pack文 ...
- WCF 的 WebGet 方式
.NET 3.5以后,WCF中提供了WebGet的方式,允许通过url的形式进行Web 服务的访问.在以前的代码中,写过多次类似的例子,但总是忘记如何配置,现在将设置步骤记录如下: endpoint通 ...
- 【Linux】文件种类与扩展名
任何装置在Linux底下都是文件.不仅如此,连数据沟通的接口也有专属的文件在负责-所以,你会了解到,Linux的文件种类真的很多- Linux文件种类 我们在刚刚提到使用『ls -l』观察到第一栏那十 ...
- libXext.so.6 libXp.so.6 libXt.so.6 is needed by openmotif21-2.1.30-11.el7.i686
# rpm -ivh openmotif21--.el7.i686.rpm error: Failed dependencies: libXext.so. -.el7.i686 libXp.so. - ...
- Python 列表 insert() 方法
描述 Python 列表 insert() 方法将指定对象插入到列表中的指定位置. 语法 insert() 方法语法: L.insert(index,obj) 参数 index -- 对象obj需要插 ...