相关资料:
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. Socket实现服务器与客户端的交互

       连接过程:   根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认. (1)服务器监听:是服务器端套接字并不定位具体的客户端套接 ...

  2. DIV+CSS布局重新学习之float/margin/padding

    之前对div的css布局一直有点半知半解,只其然却不知其所以然,到网上下载了“十天学会DIV+CSS(WEB标准)”的chm电子版,然后跟着练习了一下,特在此记录,备忘. <!DOCTYPE h ...

  3. Linux对包管理阐述

    Centos/Redhat/Fedora的软件包,都是rpm后缀的文件.包管理器rpm(Redhat packages manager)  linux的哲学思想是简单命令解决复杂任务,因此每个软件的功 ...

  4. VS2010没有Intellisense(智能感知)的解决办法

    VS2010没有Intellisense(智能感知)的解决办法 Visual Studio 2010 的Intellisense是依赖于Microsoft SQL Server Compact 3.5 ...

  5. 深入了解MyBatis参数

    参考1 参考2 参考3

  6. HDUOJ---(4708)Rotation Lock Puzzle

    Rotation Lock Puzzle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  7. java IO 入门例子

    import java.io.File; /** * File类型基本操作 */ /** * @author Administrator * */ public class FileDemo { /* ...

  8. Posix共享内存区

    1.概述 Posix提供了两种在无亲缘关系进程间共享内存区的方法: (1)内存映射文件:先有open函数打开,然后调用mmap函数把得到的描述符映射到当前进程地址空间中的一个文件(上一篇笔记所用到的就 ...

  9. HDU 5402(Travelling Salesman Problem-构造矩阵对角最长不相交路径)

    Travelling Salesman Problem Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (J ...

  10. Java调用Linux命令(cd的处理)

    一.Java调用Linux系统的命令非常简单 这是一个非常常用的调用方法示例: public String executeLinuxCmd(String cmd) { System.out.print ...