delphi與變長引數——開放陣列(1)
delphi與變長引數——開放陣列(2)
上接delphi與變長引數——開放陣列(2)。
現在回到文章開頭提到的可變型別的開放陣列,可變型別的開放陣列允許向單個過程或函式傳遞不同型別表示式的陣列。要定義含有變體開放陣列引數的方法,需要指定「array of const」或「array of tvarrec」作為引數型別。【注1】
[delphi]view plain
copy
//定義含有變體開放陣列引數的方法
procedure
dosomething(a:
array
ofconst
);
procedure
dosomething(a:
array
oftvarrec);
array of const在定義引數時等價於array of tvarrec。array of const 只能指定引數的型別為可變型別的開放陣列引數(array of tvarrec),而不能用其定義陣列變數,但array of tvarrec還可以用來定義tvarrec型別的陣列變數,而且可以將這個陣列變數當作引數傳遞給可變型別的開放陣列引數的方法。
[delphi]view plain
copy
vararr:array
ofconst
;//錯誤
arr:array
oftvarrec;
//合法
dosomething(arr);//合法
tvarrec型別用於含有array of const型別的引數的函式內部,編譯器自動通過開放陣列構造器來構造開放陣列引數的實參,
將構造器中的每個元素轉換為tvarrec值,vtype欄位表示每個tvarrec值的簡單型別,可變型別常量(如vtinteger型別時的vinteger)表示為傳遞到tvarrec結構中的標記欄位的值。
雖然tvarrec是可變型別,它能「容納」各種基礎資料型別,但這種「容納」是通過開放陣列構造器來實現的,編譯器本身並不能自動實現,即tvarrec與其他資料型別是不相容的,不能將其他型別的陣列變數傳遞給開放陣列引數的方法。
[delphi]view plain
copy
dosomething([1,
2,'a',
'tht'
]);//正確
vararr:array
[0..10
] of
integer;
...//賦值
dosomething(arr);//錯誤
開放陣列構造器允許在函式或過程呼叫中直接構造陣列;它們僅用於傳遞開放陣列引數或可變型別開放陣列引數。
與集合構造器相似,開放陣列構造器是乙個由方括號封裝、逗號隔開的表示式序列。開放陣列構造器僅用於傳遞值引數或常量引數。構造器中的表示式必需與開放陣列引數的基型別是賦值相容的。對於可變型別開放陣列引數的情況,表示式可以是不同型別的。【注2】
delphi與變長引數 可變型別開放陣列 3
上接delphi與變長引數 開放陣列 2 現在回到文章開頭提到的可變型別的開放陣列,可變型別的開放陣列允許向單個過程或函式傳遞不同型別表示式的陣列。要定義含有變體開放陣列引數的方法,需要指定 array of const 或 array of tvarrec 作為引數型別。注1 定義含有變體開放陣列...
開放式陣列引數,我學習
keylife富翁筆記 作者 hongyuan 標題 開放式陣列引數,我學習 關鍵字 動態陣列,開放式陣列引數 分類 個人專區 密級 公開 評分 回覆 0,閱讀 603 指定型別,但不確定元素個數的開放式陣列引數 type arraychar array char procedure test co...
Python中函式的引數傳遞與可變長引數
1.python中也有像c 一樣的預設預設函式 1 def foo text,num 0 2print text,num 34 foo asd asd 0 5 foo def 100 def 100 定義有預設引數的函式時,這些預設值引數位置必須都在非預設值引數後面。呼叫時提供預設值引數值時,使用提...