面试-默认参数(传值)、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 的复制和引用 (传值和传址)
复制(传值-实参): 基本类型赋值.函数参数 引用(传址-形参): 对象.数组.函数
随机推荐
- SQLite简单介绍
一.离线缓存 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等. 说明:离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式 (1)归档:NSCodeing.NSKeyed ...
- sudo: Cannot execute /usr/local/bin/zsh: No such file or directory 问题
参考:sudo: Cannot execute /usr/local/bin/zsh: No such file or directory 之前在美化Ubuntu的时候,下了个zsh,但是忘记改配置文 ...
- JS定义类及对象
1.工厂方式 <script type="text/javascript"> function createObject(name){ var p = new Obje ...
- .net mvc前台如何接收和解析后台的字典类型的数据 二分搜索算法 window.onunload中使用HTTP请求 网页关闭 OpenCvSharp尝试 简单爬虫
.net mvc前台如何接收和解析后台的字典类型的数据 很久没有写博客了,最近做了一个公司门户网站的小项目,其中接触到了一些我不会的知识点,今日事情少,便记录一下,当时想在网上搜索相关的内容,但是 ...
- pythonl练习笔记——爬虫的初级、中级、高级所匹配的知识
1 初级爬虫 (1)Web前端的知识:HTML, CSS, JavaScript, DOM, DHTML, Ajax, jQuery,json等: (2)正则表达式,能提取正常一般网页中想要的信息,比 ...
- Jmeter -----计数器(counter)
计数器的定义 Allows the user to create a counter that can be referenced anywhere in the Thread Group. The ...
- golang(5)使用beego 开发 api server 和前端同学拆分开发,使用swagger
1,beego api Swagger 是一个规范和完整的框架,用于生成.描写叙述.调用和可视化 RESTful 风格的 Web 服务.整体目标是使client和文件系统作为服务器以相同的速度来更新. ...
- SICP 习题 (2.8) 解题总结:区间的减法
SICP 习题 2.8 须要我们完毕区间运算的减法.区间运算的加法书中已经有了,代码例如以下: (define (add-interval x y) (make-interval (+ (lower- ...
- Python log10() 函数
描述 log10() 方法返回以10为基数的x对数,x>0. 语法 以下是 log10() 方法的语法: import math math.log10( x ) 注意:log10()是不能直接访 ...
- Python ceil() 函数
描述 ceil(x) 函数返回一个大于或等于 x 的的最小整数(向上取整). 语法 以下是 ceil() 方法的语法: import math math.ceil( x ) 注意:ceil()是不能直 ...