unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TString20 = String[20];
type
TDigits = array[1..10] of integer;
type
TDigits1 = array of integer; //開放式宣告方式
var
Form1: TForm1;
implementation
{$R *.dfm}
//參數傳值
function DoubleByValue(X : Integer) : Integer;
begin
X := X *2 ;
Result := X ;
end;
//變數參數
function DoubleByRef(var X : Integer) : Integer; //變數傳入可再改變X變數,並不會有備份變數產生
begin
X := X * 2 ;
Result := X ;
end;
//常數參數
function DoubleByCns(Const X : integer) : Integer;//編譯程式可以對於結構型別或字串型別的參數,產生最佳化的機器碼。也可以提供一層安全防護,避免不小心把參數以變數參數的方式,
begin
Result := 8;
if X = 4 then
Result := 4;
end;
//輸出參數
procedure GetInfo(out Info : string);
begin
Info := 'ShowInfo';
end;
//字串參數傳入
procedure Check(S : TString20); //因為不能傳入 procdure Check(S : String[20]); //語法錯誤 所以要自定型別
begin
showmessage(S);
end;
//陣列參數傳入
procedure Sort(A : TDigits); //因procdure Sort(A : array[1..10] of integer); // 語法錯誤
begin
end;
//陣列參數傳入
function Find(A : array of Char):Integer; //宣告了一個叫做Find的函式,這個函式可以接受一個任意大小的字元陣列當參數,並且傳回一個整數值
begin
Result:=0;
end;
//預設參數值
procedure FillArray(A : Integer; B : Integer = 0); //不可以前有後沒有procedure FillArray(A : Integer = 0; B : Integer);不可以寫在一起procedure FillArray(A, B : Integer = 0);
begin
end;
procedure TForm1.Button1Click(Sender: TObject);
var
test: array of DifBlk;
I, J, V, W, N, M : integer;
MyRecord : string;
begin
I := 4;
V := 4;
N := 4;
J := DoubleByValue(I); // J= 8 ; I = 4
W := DoubleByRef(V); // W = 8 ; V = 8
M := DoubleByCns(N); // N = 8 ; V = 8
GetInfo(MyRecord); //MyRecord只是一個放資料的容器,GetInfo可以把產生的資料放在裡頭 。呼叫GetInfo時候,在程式的控制權轉移到GetInfo之前,MyRecord所佔用的記憶體就會自動解除。
showmessage(MyRecord);
Check('CC');
//FillArray(MyI);即等於 FillArray(MyI, 0);
end;
end.
星期一, 10月 15, 2007
參數傳遞
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言