在 unsafe 內容中,型別有可能是指標型別、實值型別或參考型別。指標型別宣告會使用下列其中一種格式:
type* identifier;
void* identifier; //allowed but not recommended
下列任何一個型別都可能是指標型別 (Pointer Type):
指標型別不會繼承自 object,而且指標型別與 object 之間無法進行轉換。此外,boxing 和 unboxing 不支援指標。不過,不同的指標型別之間以及指標型別與整數類資料型別之間可以進行轉換。
只能將 * 寫在基礎型別旁,而不能在每個指標名稱前面都加上 *。例如:
int* p1, p2, p3; // Ok
int *p1, *p2, *p3; // Invalid in C#
指標無法指向參考或包含參考的結構,因為物件參考有可能是記憶體回收的物件 (即使有指標指向它,也是一樣)。GC 不會持續追蹤是否有任何指標型別指向物件。
型別 myType* 的指標變數值是型別 myType 的變數位置。以下是指標型別宣告的範例:
|
範例
|
說明
|
| int* p | p 為整數的指標 |
| int** p | p 為整數指標的指標 |
| int*[] p | p 為整數的一維陣列指標 |
| char* p | p 為字元的指標 |
| void* p | p 為未知型別的指標 |
您可以使用指標間接取值運算子 *,存取指標變數所指向位置的內容。例如下列宣告:
其中的運算式 *myVariable 代表位於 myVariable 所包含位址的 int 變數。
間接取值運算子無法套用至型別 void* 的指標。不過,您可使用轉型,將 Void 指標轉換為任何其他指標型別,反之亦然。
指標可以是 null。將間接取值運算子套用於 null 指標會導致由實作環境決定行為。
請注意,在方法之間傳遞指標時,可能會導致未定義的行為。例如,透過 Out 或 Ref 參數,或函式結果,傳回指向區域變數的指標。如果已在固定區塊中設定指標,則其指向的變數就可能不再是固定的。
下表所列出的運算子和陳述式可以用於 unsafe 內容中的指標:
|
運算子/陳述式
|
用來
|
| * | 執行指標間接取值 |
| -> | 透過指標存取結構的成員 |
| [] | 索引指標 |
| & | 取得變數的位址 |
| ++ 和 -- | 遞增和遞減指標 |
| + 和 - | 執行指標算術 |
| ==、!=、<、>、<= 和 >= | 比較指標 |
| stackalloc | 在堆疊上配置記憶體 |
| fixed 陳述式 | 暫時固定變數以找到其位址 |

C# 語言規格
如需詳細資訊,請參閱 C# 語言規格中的下列章節:

請參閱