1. 程式人生 > >C語言之一級指標與二級指標剖析

C語言之一級指標與二級指標剖析

什麼是指標?

       在電腦科學中,指標(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加一指向下一塊空間。