在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
编译器选项。