1、C# 不安全代碼:當一個代碼塊使用 unsafe 修飾符標記時,C# 允許在函數中使用指針變量。
不安全代碼或非託管代碼是指使用了指針變量的代碼塊。
補充:什麼是受管制(託管)的代碼?
託管代碼是運行.NET 公共語言運行時CLR的代碼。
unsafe:非託管代碼,不經過CLR運行,程序員自行分配和釋放內存空間。
2、在同一個聲明中聲明多個指針時,星號 * 僅與基礎類型一起寫入;而不是用作每個指針名稱的前綴。 例如:
int* p1, p2, p3; // 正確
int *p1, *p2, *p3; // 錯誤(這是C++中的寫法)
3、指針與數組
在 C# 中,數組名稱和一個指向與數組數據具有相同數據類型的指針是不同的變量類型。例如,int *p 和 int[] p 是不同的類型。您可以增加指針變量 p,因爲它在內存中不是固定的,但是數組地址在內存中是固定的,所以您不能增加數組 p。
因此,如果您需要使用指針變量訪問數組數據,可以像我們通常在 C 或 C++ 中所做的那樣,使用 fixed 關鍵字來固定指針。例如:
public unsafe static void Main()
{
int[] list = {10, 100, 200};
fixed(int *ptr = list)
/* 顯示指針中數組地址 */
for ( int i = 0; i < 3; i++)
{
Console.WriteLine("Address of list[{0}]={1}", i, (int)(ptr + i));
Console.WriteLine("Value of list[{0}]={1}", i, *(ptr + i));
}
Console.ReadKey();
}
4、編譯不安全代碼
爲了編譯不安全代碼,您必須切換到命令行編譯器指定 /unsafe 命令行。