不安全程式碼簡介

當由 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