原來C#不僅僅支持和C/C++中指針(或者說是引用)很像的委托delegate,還支持在unsafe代碼塊中使用指針,從而寫非托管的代碼(人為不讓垃圾回收機制來管理相應的內存)。在unsafe中就可以使用指針,基本用法和C++差不多(果然是一家人,哈哈)。
在用指針調用數組的時候需要使用fixed語句(只能在unsafe語句塊中使用)來固定指針變量的初始值,否則可能被垃圾回收機制改變指針變量的值,fixed語句可以禁止垃圾回收機制重定位可移動的變量。
fixed語句中可以設置指向托管變量的指針,並且執行該語句期間可以固定某變量。
基本語法
fixed (<需要固定的變量>)
{ <fixed語句塊,內部可以用指針對托管變臉操作> }
下面上一個操作數組的簡單例子:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.IO; 7 using System.Collections.Generic; 8 9 namespace CsharpStudy 10 { 11 12 13 14 15 16 class Program 17 { 18 19 20 static void Main(string[] args) 21 { 22 /************Main function***************/ 23 24 unsafe 25 { 26 int[] list = new int[3]{10, 20, 30}; 27 28 fixed (int* p = list) 29 { 30 for (int i = 0; i < 3; i++) 31 { 32 Console.WriteLine(*(p + i)); 33 } 34 35 } 36 } 37 38 39 /****************************************/ 40 Console.WriteLine(); 41 Console.ReadKey(); 42 } 43 } 44 45 46 }
例子的結果圖是
注意,在VS中運行unsafe的代碼的時候需要在project的屬性中找到bulid,勾選允許非安全的代碼這一項。