本節將詳細分析指針。
ide
1、指針函數
指針實際上也是一個變量,不過這個變量不同凡響的是,他存的值是一個地址。
spa
int a = 4; int* p = &a;
這段代碼的內存如圖所示
指針
從圖中能夠看出,p本質上也是一個變量,只是這個變量比較特殊,他的值是a變量的地址。
blog
這個時候,咱們經過*號就能夠訪問p變量存儲的這個地址所保存的值,這句話讀起來可能有點繞。簡單來講,就是*p這樣作之後,讀到的其實是a的值,也就是說*p ==> 4。
內存
2、傳值調用與傳址調用
it
若是函數體內部,須要改變實參的時候,就須要經過指針來完成。class
考慮這樣一個問題,使用一個函數,完成兩個數的交換。這個基本上是我們學C語言最開始就會寫的函數。
變量
int swap(int* a, int* b) { int c = *a; *a = *b; *b = c; }
函數在進行傳值調用的時候,不會改變實參的值,只能在函數內部利用實參的值。
im
3、常量指針
以前咱們已經討論過了const關鍵字,這裏將const關鍵字和指針結合。主要存在如下幾點須要注意
const int* p; //p可變,p指向的內容不可變 int cosnt* p; //跟上一次同樣,沒有區別 int* const p; //p不可變,p指向的內容可變 const int* const p; //p不可變,p指向的內容也不可變
對於記憶const跟指針的結合,有個口訣,左數右指。