閱讀653 返回首頁    go 人物


C# 指針學習筆記之指針類型

大學的時候學過C++、C,最近工作也不是很忙,就想起看看C#中的指針,看看、回憶一下啊,指針的用法,以下學習筆記摘自msdn:指針類型

在不安全的上下文中,類型可以是指針類型以及值類型或引用類型。指針類型聲明具有下列形式之一:

type* identifier;
void* identifier; //allowed but not recommended

下列類型都可以是指針類型:

指針類型不繼承 object,並且指針類型與 object 之間不存在轉換。此外,裝箱和取消裝箱不支持指針。但是,允許在不同指針類型之間以及指針類型與整型之間進行轉換。

當在同一個聲明中聲明多個指針時,* 僅與基礎類型一起使用,而不是作為每個指針名稱的前綴。例如:

int* p1, p2, p3;   // Ok
int *p1, *p2, *p3;   // Invalid in C#

指針不能指向引用或包含引用的結構,因為即使有指針指向對象引用,該對象引用也可能會被執行垃圾回收。GC 並不注意是否有任何類型的指針指向對象。

myType* 類型的指針變量的值是 myType 類型的變量的地址。下麵是指針類型聲明的示例:

示例 說明

int* p

p 是指向整數的指針

int** p

p 是指向整數的指針的指針

int*[] p

p 是指向整數的指針的一維數組

char* p

p 是指向字符的指針

void* p

p 是指向未知類型的指針

指針間接尋址運算符 * 可用於訪問位於指針變量所指向的位置的內容。例如,對於下麵的聲明,

int* myVariable;

表達式 *myVariable 表示在 myVariable 中包含的地址處找到的 int 變量。

不能對 void* 類型的指針應用間接尋址運算符。但是,可以使用強製轉換將 void 指針轉換為其他指針類型,反之亦然。

指針可以為 null。如果將間接尋址運算符應用於 null 指針,則會導致由實現定義的行為。

注意,在方法之間傳遞指針會導致未定義的行為。示例包括通過 Out 或 Ref 參數向局部變量返回指針或作為函數結果向局部變量返回指針。如果將指針設置在固定的塊中,它所指向的變量可能不再是固定的。

下表列出可在不安全的上下文中針對指針執行的運算符和語句:

運算符/語句 用途

*

執行指針間接尋址。

->

通過指針訪問結構的成員。

[]

對指針建立索引。

&

獲取變量的地址。

++ 和 --

遞增或遞減指針。

加、減

執行指針算法。

==、!=、<、>、<= 和 >=

比較指針。

stackalloc

在堆棧上分配內存。

fixed 語句

臨時固定變量以便可以找到其地址。

代碼示例:
// cs_unsafe_keyword.cs
// compile with: /unsafe
using System;
class UnsafeTest
{
   // Unsafe method: takes pointer to int:
   unsafe static void SquarePtrParam(int* p)
   {
      *p *= *p;
   }

   unsafe static void Main()
   {
      int i = 5;
      // Unsafe method: uses address-of operator (&):
      SquarePtrParam(&i);
      Console.WriteLine(i);
   }
}

輸出

25






最後更新:2017-04-04 07:32:01

  上一篇:go Javascript 學習 筆記一
  下一篇:go 2015火車票搶票,放票時間,幾點放票