相关资料:
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(常数)的更多相关文章

  1. Java方法传递参数传值还是传址的问题

    这几天重构项目代码遇到一个疑问:可不可以在方法A中定义一个boolean变量b为false,然后A调用方法C把b传递到C方法中经过一些列业务判断后修改为true,C执行结束后A方法中b的值还是原来的f ...

  2. delphi 函数参数传递 默认参数(传值)、var(传址)、out(输出)、const(常数)四类

    参数可以分为: 默认参数(传值).var(传址).out(输出).const(常数)四类 {默认参数是传值, 不会被改变} function MyF1(x: Integer): Integer; be ...

  3. javascript的变量,传值和传址,参数之间关系

    先把收获晾一下: 1.javascrip变量包含两种类型的值,一种为引用类型的值,一种是基本类型的值.引用类型包括:Array,Object,Function(可以这么理解,非基本类型的都是引用类型) ...

  4. js- 引用和复制(传值和传址)

    js- 引用和复制(传值和传址) 好像一般很少人讲到js中的引用和复制,不过弄清楚这个概念可以帮助理解很多东西 先讲一下很基础的东西,看看js中几种数据类型分别传的什么引用:对象.数组.函数复制:数字 ...

  5. 图解JS的传值与传址

    //编程过程中经常会碰到传值,传址的问题!今天的主题就是关于传值.与传址. //先讲讲赋值操作 //下例是原始类型赋值操作 var a=1,b=a,a=2; console.log("a=& ...

  6. javascript . 05 json的组成、for...in 遍历对象、简单数据类型与复杂数据类型的传值与传址、内置对象

    对象字面量  JSON var obj = { aaa :999}; var json={"aaa":999,"bbb":888}; "kay&quo ...

  7. 再谈js传值和传址

    js的传值和传址还是真绕,前回文说道 1.值类型是传值的 2.对象和数组是传址的 这两点通过例子的到了证实 然而还有一种情况没有讨论 即 函数的参数的传值和传址 通过实验,在函数中用一个新对象去覆盖传 ...

  8. Java传值和传址

    调用函数时,传的参数过去可能是传值,也可能是传址.如果是传值,函数内部的操作对参数的值没有影响:如果是传址,函数内部的操作是对参数指向的内存进行操作,会影响参数的值. Java到底是传值还是传址?用下 ...

  9. js 的复制和引用 (传值和传址)

    复制(传值-实参):  基本类型赋值.函数参数 引用(传址-形参):  对象.数组.函数

随机推荐

  1. 使用Qt Creator 2.60编写C/C++程序

    使用Qt Creator 2.60编写C/C++程序(Windows7-64bit和Ubuntu12.10-64bit). 一.Windows7-64bit +MinGW: 从官网下载qt creat ...

  2. 转载:PHP详解ob_clean,ob_start和ob_get_contents函数

    1.这三个函数运用在PHP4和PHP5中.在一些PHP项目中,经常能看到这三个函数的使用. 有的输出,前面本来要显示在页面里的东西全都被清除了,不显示了. 第二个函数:ob_start(); 告诉ph ...

  3. maven 继承关系和聚合

    maven继承管理 让版本的管理只在一个地方改变 modules用于聚合,把执行的项目都放到同一的地方用module包括,可以省去一个个项目去mvn install,这样可以所有项目一次聚合 mvn ...

  4. CTF入门

    一.抓包工具 Fiddler:轻量级,简洁,原理是使用代理 有一个大坑,如果打开抓包工具,运行Python Requests发起网络请求,Python程序会运行得非常慢,所以必须把抓包工具关掉才可以快 ...

  5. EditPlus集成Java编译和运行命令组建轻量级Java SE开发工具

    http://www.gogogogo.me/development/EditPlus-Java.html

  6. android调节屏幕亮度

    一:只改变当前程序android屏幕亮度(1)方法:lp.screenBrightness 取值 0.0 -- 1.0 ※设定值(float)的范围,默认小于 0(系统设定).0.0(暗)-1.0(亮 ...

  7. go学习 --- Chan (通道)

    Golang使用Groutine和channels实现了CSP(Communicating Sequential Processes)模型,channles在goroutine的通信和同步中承担着重要 ...

  8. XtraTreeList直接显示Access数据库表中的数据

    方法1:点击在拖入的显示控件(TreeList)右上方的箭头,在Treelist任务中选择数据源,添加项目数据源,依次选择数据库.数据集,新建连接,浏览选择数据库(*.mdb),依次点击 下一步,选择 ...

  9. OAF_OAF控件系列1 - Region Type汇总(概念)

    2014-06-22 Created By BaoXinjian

  10. Python 字典 popitem() 方法

    描述 Python 字典 popitem() 方法随机返回并删除字典中的一个键/值对(一般删除末尾对). 如果字典已经为空,却调用了此方法,就报出KeyError异常. 语法 popitem() 方法 ...