引用參數:
引用參數用var關鍵字標示
procedure DoubleTheValue (var Value: Integer);begin Value := Value * 2;end;
在這種情況下,參數既把一個值傳遞給過程,又把新值返回給調用過程的代碼。當你執行完以下代碼時:
var X: Integer;begin X := 10; DoubleTheValue (X);
x變數的值變成了20,因為過程通過引用訪問了X的原始儲存單元,由此改變了X的初始值
在C++中, 引用用&表示
值得注意的是:
Delphi 3增加了一種新的參數:out。out參數沒有初始值,只是用來返回一個值。out參數應只用於COM過程和函數,一般情況下最好使用更有效var參數。除了沒有初始值這一點之外,out參數與var參數相同。
常量參數
和C++一樣,用CONST關鍵字表示
function DoubleTheValue (const Value: Integer): Integer
編譯器會選用一種與引用參數相似的方法編譯常參(C++術語中的常量引用),但是從表面上看常參又與值參相似,因為常參初始值不受常式的影響。
開放數組參數
與C語言不同,Pascal 函數及過程的參數個數是預定的。如果參數個數預先沒有確定,則需要通過開放數組來實現參數傳遞。
一個開放數組參數就是一個固定類型開放數組的元素。 也就是說,參數類型已定義,但是數組中的元素個數是未知數。
function Sum (const A: array of Integer): Integer;
類型變化的開放數組參數
除了類型固定的開放數組外,Delphi 還允許定義類型變化的甚至無類型的開放數組。這種特殊類型的數組元素可隨意變化,能很方便地用作傳遞參數。
技術上,array of const 類型的數組就能實現把不同類型、不同個數元素組成的數組一下子傳遞給常式
function Format (const Format: string; const Args: array of const): string;
N := 20;
S := 'Total:';
Label1.Caption := Format ('Total: %d', [N]);
Label2.Caption := Format ('Int: %d, Float: %f', [N, 12.4]);
Label3.Caption := Format ('%s %d', [S, N * 2]);
但我們往往會遇到這樣的問題:
在FUN()中傳入 var a: array of integer 參數之後
不能在函數裡SetLength(a,num);
所以我們把參數設為動態數群組類型
type
tarrayofinteger = array of integer;
procedure grow( var data: tarrayofinteger );
begin
setlength( data, length(data) , 新長度 );
// 動態數組作為參數可以改變數組大小。
end;
參考BLOG:
http://hi.baidu.com/broland/blog/item/0ab119f516b4ade57609d75c.html
參考文獻:
<PASCAL精要>