不安全代码简介

当由 unsafe 修饰符标记时,C#允许在代码块的函数中使用指针变量。不安全代码或非托管代码是使用指针变量的代码块。

指针是一个变量,其值是另一个变量的地址,即存储器位置的直接地址。与任何变量或常量类似,你必须先声明指针,然后才能使用它来存储任何变量地址。

指针声明的一般形式是:

type *var-name;

以下是有效的指针声明:

int    *ip;    /* pointer to an integer */
double *dp;    /* pointer to a double */
float  *fp;    /* pointer to a float */
char   *ch     /* pointer to a character */

以下示例说明了使用 unsafe 修饰符在 C#中使用指针:

using System;
namespace UnsafeCodeApplication
{
   class Program
   {
      static unsafe void Main(string[] args)
      {
         int var = 20;
         int* p = &var;
         Console.WriteLine("Data is: {0} ",  var);
         Console.WriteLine("Address is: {0}",  (int)p);
         Console.ReadKey();
      }
   }
}

当上面的代码编译并执行时,它会产生以下结果:

Data is: 20
Address is: 99215364

你可以将代码的一部分声明为不安全,而不是将整个方法声明为不安全:

// safe code
unsafe
{
    // you can use pointers here
}
// safe code