發現Delphi中關於函數參數部分的內容還是比較多的,暫時說到這篇隨筆為止吧,以後再繼續討論一下函數的參數部分的內容。
一 工程文件
program DefaultParameter; {$APPTYPE CONSOLE} uses SysUtils, Unit1 in 'unit1.pas'; var nVar:integer; strVar:string; i:integer; nVarArray:array of integer; begin { 1、 調用具有默認參數的方法 } //不提供參數 unit1.defaultParameter(10); //提供參數 unit1.defaultParameter(10,'volcanol'); //調用無類型參數的函數 { 1、constant object cannot be passed as var paramter } //WriteLn(noTypeParameter('100')); //這樣無法調用 nVar := 100; WriteLn(noTypeParameter(nVar)); //轉換時出現了異常,因此不建議使用無類型參數 strVar:= '100'; WriteLn(noTypeParameter(strVar)); //調用短字符串類型參數的函數 for i := 0 to sizeof(ShortString) do begin strVar[i]:='a'; end; shortSringParameter(strVar); //如果將 string類型的變量傳遞給 shortString 類型變量會自動截斷 for i := 0 to sizeof(ShortString) + 128 do begin strVar[i]:= 'a'; end; shortSringParameter(strVar); //動態數組參數 try SetLength(nVarArray,10); WriteLn(Low(nVarArray)); WriteLn(High(nVarArray)); for i := Low(nVarArray) to High(nVarArray) do begin nVarArray[i] := i; end; WriteLn(High(nVarArray)); arrayParameter(nVarArray); except on E:Exception do ReadLn; end; ReadLn; ReadLn; end.
二、單元文件
{ 參數 1、默認參數 2、無類型參數 3、短字符串參數 4、數組參數 } { 1、 和其他的OOP編程語言一樣,Delphi的Object Pascal語言也支持方法和函數的 默認參數機制 2、 默認參數在某些場合非常適用,當一些方法、函數的參數在不同的場合調用時 均具有同樣的設置時,就可以設置為默認參數 3、 如何函數參數設置過默認參數,那麼在調用的時候就可以不提供實際參數 } unit Unit1; interface { 單元文件的結構需要注意 } uses SysUtils; { 單元文件中, type類型定義必須在 uses 子句後面 } type PInt=^integer; { 默認參數 1、默認參數的定義的規則與C++裡面默認參數的規則類似 2、默認參數定義的形式參數必須從最後一個參數開始,及從右往左定義 3、如果一個參數定義了默認參數,則其後面的參數均需要定義默認參數 4、如果在一個類型中定義了多個形式參數,則這些形式參數均不能定義默認參數 5、 } procedure defaultParameter(nVar:integer;varStr:string='Delphi'); { 無類型參數 1、無類型參數就是例程聲明時形式參數不指定形式參數的類型 2、無類型參數定義時必須用關鍵字var、const、out之中的一個 3、無類型參數不能使默認的傳值方式 4、在使用無類型參數時,必須將參數進行類型轉換後才能使用 5、調用時需要注意存在一些限制 A) 整型字面值不能傳遞給無類型參數 B) 無類型的整型值不能傳遞給無類型參數 6、由於無類型參數在轉換的時候存在太多的限制,建議一般不要使用這種類型的定義 方法 } function noTypeParameter(var noTypeVar):string; { 短字符串參數 1、 短字符串類型 ShortString 是255字節長度的字符串類型 2、 可以通過 string[length] 的方法定義指定長度小於255字節的字符串類型 varStr:string[255]; 就是定義一個長度最大為255字節的字符串變量 3、 形式參數不能用 string[length] 的方式定義 ,如果需要的話就必須定義新的 數據類型 3、 2010以後 string默認為WideString, 需要打開開關才能使 AnsiString類型 } procedure shortSringParameter(strVar:ShortString); { 數組參數 1、數組分為靜態數組、動態數組,還有一種數組類型 開發數組 2、靜態數組定義為 nVarArray:array[1..10] of integer; //在定義的時候自定數組維度 3、動態數組定義為 定義動態數組類型 nVarArray:array of integer; //定義時不指定數組的維度, 使用前用 SetLength(數組名,第一維的長度,第二維的長度,) 函數申請 數組空間。 3、數組參數在定義時不能指定數組的維度和大小,要使用指定類型的參數,則必須定義 新的數據類型 4、還可以使用開放數組形式定義數組參數 } procedure arrayParameter(nVarArray:array of integer); implementation procedure defaultParameter(nVar:integer;varStr:string='Delphi'); var str:string; begin str := 'Hello ' + varStr; WriteLn(str); end; function noTypeParameter(var noTypeVar):string; var str:string; begin //將 noTypeVar 無類型參數轉換為整型數 str:= IntToStr(integer(noTypeVar)); //隱含的變量 result 返回函數值 result := str; end; procedure shortSringParameter(strVar:ShortString); begin WriteLn(strVar); end; { 1、下面的函數執行的過程中還存在一定的問題,需要繼續研究一下 2、動態數組的上、下界最好通過Low()、High()函數來求取,所以與 C/C++ 有一點區別 } procedure arrayParameter(nVarArray:array of integer); var i:integer; begin WriteLn(Low(nVarArray)); WriteLn(High(nVarArray)); for i := Low(nVarArray) to High(nVarArray) do begin //WriteLn(IntToStr(nVarArray[i])); //這樣編譯就會出錯,原因?? WriteLn(nVarArray[i]) ; end; end; end.
歡迎轉載本系列文章,轉載請注明來源。