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 之間不存在轉換。此外,裝箱和取消裝箱不支持指針。但是,允許在不同指針類型之間以及指針類型與整型之間進行轉換。
當在同一個聲明中聲明多個指針時,* 僅與基礎類型一起使用,而不是作為每個指針名稱的前綴。例如:
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-03 20:19:32
上一篇:
小米2S電池電量用盡充電無法開機解決方法
下一篇:
GUI Design Studio 使用教程
雲上DevOps開發布局
貸款、天使投資(風控助手)業務數據庫設計 - 阿裏雲RDS PostgreSQL, HybridDB for PostgreSQL最佳實踐
OkHttp 3.7源碼分析(三)——任務隊列
阿裏雲雙11活動擼福利攻略幸運篇 ecs首購客戶100%得好禮
IE 再爆 0day 漏洞,9和10版本不受影響
高可用架構篇 MySQL源碼編譯安裝(CentOS-6.6+MySQL-5.6)
阿裏雲發布新一代處理器矛頭直指AWS 競合關係會是雲計算行業主流
使用Apache HttpClient實現多線程下載的小例子
保存數據返回後可以繼續編輯
【播放器SDK】Android如何實現固定豎屏播放視頻