& 與 fixed 將變數分為兩類:
ref/out 參數)固定變數可直接取址;移動變數必須在 fixed 區塊中取址,位址僅在區塊內有效。
void*null → 任意指標型別轉換不改變位址值,但若結果指標未正確對齊,解引用行為未定義。
unsafe static void Main() {
double d = 123.456e23;
byte* pb = (byte*)&d;
for (int i = 0; i < sizeof(double); i++)
Console.Write("{0:X2} ", *pb++);
Console.WriteLine();
}
輸出取決於系統端序。
允許指標陣列,但限制:
System.Array,但透過它存取元素會拋運行時錯誤(指標不可轉 object)IList<T>(指標不可作型別參數)foreach 會被編譯器重寫為多維索引迴圈,不支援指標陣列| 運算 | 說明 |
|---|---|
*p | 間接存取(解引用),void* 禁止 |
p->Member | 等同 (*p).Member,結構成員存取 |
p[index] | 等同 *(p + index),元素存取 |
++/-- | 指標算術,按型別大小移動 |
+/- | 指標與整數加減 |
== != < > <= >= | 指標比較 |
stackalloc | 堆疊配置記憶體 |
fixed | 暫時固定移動變數 |