为了保持类型安全,默认情况下,C#不支持指针运算。不过,通过使用unsafe关键字,可以定义允许使用指针的不安全上下文。
在公共语言运行库(CLR)中,不安全代码是指无法验证的代码。C#中的不安全代码不一定是危险的,只是其安全性无法由CLR进行验证。
下面的代码是一段不安全代码,在方法中声明了一个int类型的指针,并将该指针自身相加:
unsafe static void add(int* p)
{
*p += *p;
}
在mian函数中使用已经定义的不安全代码方法,并将结果输出:
unsafe static void Main()
{
int i = 5;
add(&i);
Console.Write(i);
Console.Read();
}
在编译不安全代码时,在解决方案中点击属性-生成-允许使用不安全代码,编译才能通过: