您的位置:首页 > 编程语言 > Delphi

Delphi 参数传递

2014-01-17 10:17 351 查看
1.数值参数

  变量和结构被完全拷贝到堆栈中,调用函数接受到的只是一个副本.数值参数传递方式是Delphi的默认方式,也是其他大部分语言的默认参数传递方式(比如C++,VC,java...).

形式: function  myFunc(object:TObject):Byte;

          procedure myProc(object:TObject);

PS:堆栈可以这样理解,每次函数或过程调用的时候,在内存中创建的一块内存,用于保存函数或过程中的临时结构等等,函数或过程调用完毕,这块内存将被释放.

2.变量参数

  不像数值参数,这种参数的传递方式,参数不是实参的副本,而是一个引用,在函数或过程中对参数的修改将会反映到参数本身,这种方式就像在C++中的引用参数.

形式: function  myFunc(var object:TObject):Byte;

      procedure myProc(var object:TObject);

3.常量参数

形式: function  myFunc(const str:string):Byte;

      procedure myProc(const number:Integer);

在这里,就是str和number的值在函数或者过程内部不允许修改,经常是为了防止这样的修改而使用const类型,但是需要注意的是,Delphi中,如果这个const参数是对象,则这个对象的属性是可以被修改的,但是在C++,java中,const类型的对象的属性是不允许被修改的.

*****指针的情况就需要注意了,看这个C++函数

void CDepart::showMeberName(const CPeople* pPeople)

{

  CPeople* ptr=new CPeople();

  pPeople=ptr;

  cout<<pPeople->m_name<<endl;

}

在这里,虽然pPeople是个const类型参数,但是,在函数内部仅仅是一个变量,

可以对其进行赋值,const标志这pPeople这块内存的值是只读的(不允许被修改),

不允许修改的是它只向的内存,但是它本身可以被修改,指向另一内存区域,如下:

void CDepart::showMeberName(const CPeople* pPeople)

{

  CPeople* ptr=new CPeople();

  *pPeople=*ptr;   //错误,pPeople指向的值不允许被修改

  cout<<pPeople->m_name<<endl;

}

4.数组参数

type 

  MyArray:Array[0..50] of Byte;

...........

  function  myFunc(TempArray:MyArray):Byte;

..........

实际上常用下面这种形式,数组的上界不确定

  function  myFunc(TempArray:Array of Byte):Byte;

  var

    i:Integer;

  begin

    i:=High(TempArray);//High返回TempArray的上界

  end;

     
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: