C 中指標的使用藝術

2021-04-13 05:45:44 字數 1292 閱讀 3855

在c++程式設計中使用指標能有速度快,節約記憶體等優點,是很多c++程式設計師的最愛。但指標是一把雙刃劍,用好了它,你就會發現指標有多麼的方便,反之,你可能就頭疼了,往往會出現意想不到的問題。

一.什麼是指標:

其實指標就像是其它變數一樣,所不同的是一般的變數包含的是實際的真實的資料,而指標只是乙個指示器,它告訴程式在記憶體的哪塊區域可以找到資料。

這是乙個非常重要的概念,有很多程式和演算法都是圍繞指標設計的,如鍊表、遍歷等。

指標是乙個資料型別,本身也需要占用四個位元組的儲存空間。所以用sizeof(void*)獲得的值為4。

二.指標的定義

看如下的例子:

int *pnumber;

這樣就定義了int型別的指標。

指標變數名稱以p為首字元,這是程式設計師通常在定義指標時的乙個習慣,以提高便程式的閱讀性,表示這是個指標。另外,雖然int* pnumber和int *pnumber是相同的,但是使用後一種的程式設計風格更好一些。比如:

int *pnumber1,*pnumber2;表示定義兩個指標,*號和變數靠近;反之,我們可能會定義成int* pnumber1,pnumber2,這將是乙個錯誤的定義,pnumber2就不是指標了。

三.指標的優點

a.為函式提供修改呼叫變元的手段;

b.支援c++動態分配子程式

c.可以改善某些子程式的效率

d.為動態資料結構(如二叉樹、鍊錶)提供支援

四、指標賦值及轉換:

a.同型別直接賦值,異型別要進行轉換。

b.強制轉換:可以把表示式結果硬性轉換為指定型別

c.char * p;(int *)p 把p強制轉換為int型,記住轉換過程中要注意兩個型別的大小,大轉小時可能會有資料丟失(如int到double)

d.涉及void *的:

c 中void *型別可賦值給任何型別的指標,反之亦然

c++ 中都需要強制轉換

void * 可看作無窮大能接納任何型別賦值,反之不行int * p =9;void * t= p(正確);p=t(錯誤)

e.不涉及void *的都要強制轉換

五.指標和陣列

不帶下標的陣列名返回陣列的起始位址,即陣列首元素的位址,所以對陣列的訪問可有兩種方式:陣列下標和指標算術。例如:

char* pchar;

char chs[100];

pchar = chs;這樣pchar就指向chs陣列的首位址。

六.陣列與引用

a.引用只是變數的別名,而不是指向變數的指標(區別於取址運算子"&")不佔記憶體空間,對變數引用的改變其相應的變數也會改變。

C 中指標使用小結

1 宣告指標 typename pointername 2 給指標賦值 對變數名用 運算子,來獲得被命名的記憶體的位址,new運算子返回未命名的記憶體的位址。3 對指標解除引用 對指標應用解除引用或間接運算子 來解除醫用 4 陣列名 陣列名被視為陣列第乙個元素的位址,但是陣列名為常量,不能修改它的值...

C 中指標使用總結

一 vs2010中開啟unsafe code 的方式 unsafe 然後再專案上點選滑鼠右鍵,選擇 屬性 在 生成 選項卡中選中 允許不安全 struct 結構體 結構體中只能包括非託管型別。操作符說明 取值運算子 取址運算子 通過指標處理結構體中的資料 獲取或賦值 與 指標增 減操作 fixed ...

c 中指標與引用的使用

先說結論 使用指標的情況 使用引用 它們的異同 相同點 不同點char pc 0 char rc pc 引用指向空值string s1 foo string s2 bar string rs s1 string ps s1 rs s2 rs仍引用s1,實際是把s2賦值給s1,所以s1現在的值是 ba...