比方說,我有這樣的聲明:如何初始化靜態數組?
TYPE
RDisk= packed record
R2: array[1..1024] of Byte;
etc
etc
end;
如何使用常量聲明中這樣初始化R2爲零:
CONST
Disk: RDisk=
(
R: ??
);
這與Record in record (Cannot initialize)
比方說,我有這樣的聲明:如何初始化靜態數組?
TYPE
RDisk= packed record
R2: array[1..1024] of Byte;
etc
etc
end;
如何使用常量聲明中這樣初始化R2爲零:
CONST
Disk: RDisk=
(
R: ??
);
這與Record in record (Cannot initialize)
省略你想要的字段爲零:
type
RDisk= packed record
R2: array[1..512] of Byte;
I: Integer;
D: Double;
R3: array[1..512] of Byte;
end;
const
Disk: RDisk=
(
I: 3;
D: 2.5;
);
,或者
const
Disk: RDisk=
(
);
我不知道爲什麼它的工作原理,它不太適合在Record Constants'文檔。
謝謝。有用。我只是希望這不是在未來版本的Delphi中不再適用的'黑客'。 – Ampere
@Altar,的確!剛剛測試過BTW,它甚至可以在D3中工作。 –
可以初始化使用此零點陣列
ZeroMemory(@R2[0],length(R2));
或本
FillChar(R2[0],length(R2),0);
爲什麼FillChar不安全?只是FillChar陣列,而不是整個記錄,它是完全安全的。 FillChar對於不是「blittable」的類型只是不安全的,即需要特殊處理的類型,如字符串,接口,變體等。 –
是的,我完全同意rudy – opc0de
FillChar的使用是不安全的,因爲它太容易犯錯誤。如果我在沒有字符串(「安全」)的記錄數組上使用它,然後下一個程序員將字符串添加到記錄中,該怎麼辦?此外,還有一個很容易讓SizeOf()與length()混淆的錯誤。 –
你可以聲明R2
類型的常數,它初始化爲這樣的全零:
const
zeros: R2 = (0, 0, 0, ...);
數組長度爲1024,所以您必須指定所有1024逗號分隔值在那個列表中。
如果我設置較少的值,則出現錯誤「:E2072元素數(3)與聲明(1024)不同」。 –
是的。這也是我的問題。 – Ampere
@Rob:你必須指定正好1024個值。這就是那些常量的工作原理。 –
類型聲明使用'=',而不是':'。這是一個類型還是變量聲明?在你之前的問題中,你聽起來像是應該是一個記錄領域。請澄清。 –
對不起。我已經更新了這個問題。 – Ampere