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;
变量和结构被完全拷贝到堆栈中,调用函数接受到的只是一个副本.数值参数传递方式是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;