C語言之一級指標與二級指標剖析
阿新 • • 發佈:2019-01-24
什麼是指標?
在電腦科學中,指標(Pointer)是程式語言中的一個物件,利用地址, 它的值直接指向(points to)存在電腦儲存器中另一個地方的值。由於通過地址能找到所需的變數單元,可以說,地址指向該變數單元。因此,將地址形象化的稱為“指標”。意思是通過它能找到以它為地址的記憶體單元。
總結:指標就是變數,用來存放地址的變數。(存放在指標中的值都被當做地址來處理)
為什麼存在指標?
將計算機的記憶體分成很多個小的單元,每個單元都對應一個獨一無二的地址,這樣就一塊地址標示一塊空間,方便管理。
指標的大小
- 在32位的機器上,地址是32個0或者1組成二進位制序列,那地址就得用4個位元組的空間來儲存,所以一個指標變數的大小就應該是4個位元組。
- 在64位的機器上,有64個地址線,那一個指標變數的大小是8個位元組,才能存放一個地址。
int a = 0;
p = &a;
要將&a(a的地址)儲存到p中,p是一個指標變數,儲存一個整形變數的地址。我們稱p為整形指標。
二級指標
指標變數也是變數,是變數就有地址,那指標變數的地址存放在那裡呢?
對於二級指標的運算有:
- *ppa 通過對ppa中的地址進行解引用,這樣找到的是 pa , *ppa 其實訪問的就是 pa。
- **ppa 先通過 *ppa 找到 pa ,然後對 pa 進行解引用操作: *pa ,那找到的是 a。
char ch = 'a';
char *cp = &ch;
下面程式碼什麼意思?能否做左值?能否做右值?
&ch;//不可左值可右值。&ch得到的是ch的地址,是一個常量。 cp;//既可左值也可右值。字元指標,存的是&ch(ch的地址)。 &cp;//不可左值可右值。&cp是cp的地址,是一個常量。 *cp+1;//可右值不可左值。因為*優先順序高於+所以*cp先結合,再加1就成了一個值而不是一塊空間。 *(cp+1);//可右值可左值。指向ch下一個地址的空間。 ++cp;//不可左值,++cp只是將cp中的內容加一,是一個地址常量。 cp++;//不可作為左值。 *++cp;//可左值可右值,表示指向ch後的下一塊空間。 *cp++;//可左值,++優先順序高於*,後置++cp先與*結合,表示指向a的下一塊空間。 ++*cp;//不可左值可右值,對*cp進行前置++操作,表示ch中的內容加一。 (*cp)++;//不可左值可右值,對*cp進行後置++操作,是一個表示式。 ++*++cp;//可右值不可左值,cp先與最近的++結合,指向下一塊空間,在進行解引用,再結合++,//對空間中的值加一。 ++*cp++;//可右值不可左值,先對ch加一,運算結束後cp加一指向下一塊空間。