1. 程式人生 > >指標的型別 指標所指向 指向指標的引用

指標的型別 指標所指向 指向指標的引用

1.指標的型別

  從語法的角度看,你只要把指標宣告語句裡的指標名字去掉,剩下的部
分就是這個指標的型別。這是指標本身所具有的型別。讓我們看看例一中各
個指標的型別:

  1. int *ptr;//指標的型別是int*

  2. char *ptr;//指標的型別是char*

  3. int **ptr;//指標的型別是int**

  4. int(*ptr)[3];//指標的型別是int(*)[3]

  5. int*(*ptr)[4];//指標的型別是int*(*)[4]


找出指標的型別的方法是不是很簡單?

2.指標所指向的型別

  當你通過指標來訪問指標所指向的記憶體區時,指標所指向的型別決定了編譯器將把那片記憶體區裡的內容當做什麼來看待。從語法上看,你只須把指標宣告語句中的指標名字和名字左邊的指標宣告符*去掉,剩下的就是指標所指向的型別。例如:

  1. int*ptr; //指標所指向的型別是int

  2. char*ptr; //指標所指向的的型別是char

  3. int**ptr; //指標所指向的的型別是int*

  4. int(*ptr)[3]; //指標所指向的的型別是int()[3]

  5. int*(*ptr)[4]; //指標所指向的的型別是int*()[4]


在指標的算術運算中,指標所指向的型別有很大的作用。指標的型別(即指標本身的型別)和指標所指向的型別是兩個概念。當你對C 越來越熟悉時,你會發現,把與指標攪和在一起的”型別”這個概念分成”指標的型別”和”指標所指向的型別”兩個概念,是精通指標的關鍵點之一。我看了不少書,發現有些寫得差的書中,就把指標的這兩個概念攪在一起了,所以看起書來前後矛盾,越看越糊塗。

3.指向指標的引用

  要理解r的型別到底是什麼,最簡單的辦法是從右向左閱讀r的定義。離變數最近的符號(此例中是符號&)對便利的型別有最直接的影響,因此r是一個引用。宣告符的其餘部分用以確定r引用的型別是什麼,此例中額符號*說明r引用的是一個指標。最後宣告的基本資料型別說明r引用的是一個int指標。

int *p;
int *&r = p;