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

來源:互聯網
上載者:User

標籤:c#   指標   學習   筆記   指標類型   

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

在不安全的上下文中,類型可以是指標類型以及值類型或參考型別。指標型別宣告具有下列形式之一:

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

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

  • sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal 或 bool。

  • 任何枚舉類型。

  • 任何指標類型。

  • 僅包含非託管類型的欄位的任何使用者定義的結構類型。

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

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

int* p1, p2, p3;   // Okint *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: /unsafeusing 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






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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.