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;
变量和结构被完全拷贝到堆栈中,调用函数接受到的只是一个副本.数值参数传递方式是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多线程及消息发送传递结构体参数
- Delphi多线程及消息发送传递结构体参数
- DELPHI的DLL传递字符串参数总结
- delphi调用C# WEB服务,参数传递问题 (转)
- Delphi与汇编笔记(3)------关于参数的传递
- Delphi的参数传递约定以及动态参数个数(转载笔记)
- Delphi利用jni向java程序中传递参数
- Java利用jni向delphi程序传递参数
- Delphi 进程之间传递cmd参数
- Delphi 函数传递参数的不同方式
- Delphi过程函数传递参数的几种方式
- Delphi 参数传递
- Delphi中的参数传递
- delphi 调用excel的宏,并传递参数给宏
- Delphi动态事件深入分析(对象方法在调用的时候会传递一个隐含的Self指针,而该指针的值在EAX中。即左边第一个参数)
- Delphi通过POST传递参数给PHP
- 关于 Delphi 参数传递方式的一点研究
- Delphi 无类型参数传递动态数组和静态数组
- Delphi中参数的传递和函数值的返回
- 扩展 delphi 线程 使之传递参数.(给匿名线程增加参数)