Delphi 参数传递

来源:互联网 发布:json数据格式验证 编辑:程序博客网 时间:2024/04/29 12:42

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;
     
 


 

原创粉丝点击