Delphi 參數傳遞

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;
     
 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章