C# 不安全代碼指針

2018-01-22 17:09 更新

C# 不安全代碼指針

C#可以通過標(biāo)記為不安全的代碼塊中的指針進(jìn)行直接內(nèi)存操作。

不安全代碼應(yīng)使用 /unsafe 編譯器選項(xiàng)進(jìn)行編譯。

指針基礎(chǔ)

指針實(shí)例保存變量的地址。

指針類型可以轉(zhuǎn)換為任何其他指針類型。

主要的指針運(yùn)算符是:

運(yùn)算符含義
&返回一個(gè)指向變量地址的指針
*返回指針地址處的變量
->一個(gè)語法快捷方式,其中x-> y等價(jià)于(* x).y

不安全代碼

通過用unsafe關(guān)鍵字標(biāo)記類型,類型成員或語句塊,我們可以使用指針類型并對內(nèi)存執(zhí)行C ++風(fēng)格指針操作。

下面是使用指針快速處理數(shù)組的示例:


unsafe void Process (int[,] data){
   int length = data.Length;
   fixed (int* b = data){
      int* p = b;
      for (int i = 0; i < length; i++)
          *p++ &= 0xFF;
    }
}

固定語句

在一個(gè)固定語句中,我們可以獲得任何值類型的指針,值類型的數(shù)組或字符串。

在數(shù)組和字符串的情況下,指針將實(shí)際指向第一個(gè)元素,它是一個(gè)值類型。

在引用類型中聲明為內(nèi)聯(lián)的值類型需要將引用類型固定,如下所示:


class Main {
   int x;
   static void Main(){
      Test test = new Test();
      unsafe{
         fixed (int* p = &test.x) // Pins test
         {
            *p = 0;
         }
         System.Console.WriteLine (test.x);
      }
   }
}

指針到成員運(yùn)算符

除了& * 運(yùn)算符之外,C#還提供了C ++風(fēng)格的 -> 運(yùn)算符,它可以在結(jié)構(gòu)上使用:


struct Test{
   int x;
   unsafe static void Main(){
      Test test = new Test();
      Test* p = &test;
      p->x = 1;
      System.Console.WriteLine (test.x);
   }
}
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號