class Demo { static void Main() { int a = 22; System.Console.WriteLine(a); unsafe { int* aPtr = &a; *aPtr = 10; System.Console.WriteLine(*aPtr); } System.Console.WriteLine(a); } } /* 《程式語言教學誌》的範例程式 http://pydoing.blogspot.com/ 檔名:pointer1.cs 功能:示範 C# 程式 作者:張凱慶 時間:西元 2013 年 6 月 */
編譯執行,結果如下
mono 編譯 unsafe 的內容,需要在命令列加上參數 -unsafe 。
由於指標是不安全的內容,因此要用 unsafe 宣告,相關程式碼放在 unsafe 之後的大括弧中
unsafe { int* aPtr = &a; *aPtr = 10; System.Console.WriteLine(*aPtr); }
這裡,指標變數 (variable) 的宣告用 int* ,也就是型態關鍵字 (keyword) 後加上星號
int* aPtr = &a;
& 則是取址運算子,此例會取得 a 的記憶體位址,然後儲存在 aPtr 之中。
第 8 行,這裡的星號是反參考運算子,會將等號右邊的值指派到 aPtr 所指向的變數中,也就是 a
*aPtr = 10;
同樣的,第 9 行的星號等同取出 aPtr 所指向變數的值,然後在命令列中。
unsafe 也可直接放在方法的宣告中,我們可將上例更改如下
class Demo { unsafe static void Main() { int a = 22; System.Console.WriteLine(a); int* aPtr = &a; *aPtr = 10; System.Console.WriteLine(*aPtr); System.Console.WriteLine(a); } } /* 《程式語言教學誌》的範例程式 http://pydoing.blogspot.com/ 檔名:pointer2.cs 功能:示範 C# 程式 作者:張凱慶 時間:西元 2013 年 6 月 */
編譯執行會得到相同的結果。
中英文術語對照 | |
---|---|
指標 | pointer |
資料型態 | data type |
變數 | variable |
關鍵字 | keyword |
您可以繼續參考
其他內建型態
相關目錄
回 C# 快速導覽
回 C# 教材
回首頁
參考資料
Standard ECMA-334 C# Language Specification
msdn: 指標型別 (C# 程式設計手冊)
msdn: unsafe (C# 參考)
msdn: Unsafe 程式碼和指標 (C# 程式設計手冊)
1 則留言:
非常詳細實用!!
謝謝版主分享^___^
張貼留言