在C#中,fixed
和unsafe
都是用于處理指針的關鍵字,但它們之間有一些區別
fixed
:
fixed
關鍵字用于固定變量的內存地址,以便在代碼塊中使用指針訪問該變量。這對于處理非托管代碼(如C或C++庫)或需要直接操作內存的情況非常有用。使用fixed
時,需要將代碼塊放在unsafe
上下文中。示例:
unsafe
{
int[] numbers = { 1, 2, 3, 4, 5 };
fixed (int* ptr = numbers)
{
for (int i = 0; i< numbers.Length; i++)
{
Console.WriteLine(*(ptr + i));
}
}
}
unsafe
:
unsafe
關鍵字用于標記包含不安全代碼的代碼塊。不安全代碼是指可能導致程序行為不確定的代碼,例如使用指針、修改只讀變量等。在C#中,默認情況下,不允許使用不安全代碼。要使用不安全代碼,需要在編譯時添加/unsafe
編譯器選項,并在代碼中使用unsafe
關鍵字。示例:
unsafe
{
int number = 10;
int* ptr = &number;
Console.WriteLine("Number: " + *ptr);
}
總結:
fixed
用于固定變量的內存地址,以便在代碼塊中使用指針訪問該變量。unsafe
用于標記包含不安全代碼的代碼塊。fixed
,需要將代碼塊放在unsafe
上下文中。unsafe
代碼,需要在編譯時添加/unsafe
編譯器選項。