指針的類型與指針所指向的類型


  指針的類型和指針所指向的類型很明顯是不一樣的東西,但好多情況下卻容易忽視它們的區別。指針的類型是指針自身的類型,而指針所指向的類型是指針指向的數據(內存)的類型。

指針的類型

  從語法上來看,我們只要把指針聲明語句里的指針名字去掉,剩下的部分就是這個指針的類型。如:

1 int *ptr;         //指針的類型是 int*
2 char *ptr;        //指針的類型是 char*
3 int **ptr;        //指針的類型是 int**
4 int (*ptr)[3];    //指針的類型是 int(*)[3]
5 int *(*ptr)[4];   //指針的類型是 int*(*)[4]

指針所指向的類型

  從語法上來看,我們只要把指針聲明語句中的指針名字和名字左邊的指針聲明符*去掉,剩下的就是指針所指向的類型。 如:

1 int *ptr;         //指針所指向的類型是 int
2 char *ptr;        //指針所指向的的類型是 char
3 int **ptr;        //指針所指向的的類型是 int*
4 int (*ptr)[3];    //指針所指向的的類型是 int()[3]
5 int *(*ptr)[4];   //指針所指向的的類型是 int*()[4]

一些小案例

案例1

  請看小程序:

1 int *p[3];
2 for (int i = 0; i < 3; i++)
3 {
4     p[i] = i;
5 }

  實際上這個小程序是有問題的。我們定義了一個指針數組,數組里的每個元素存儲的都是指針。所以p[i] = i相當於要將int強制轉換成int *類型,這當然不行(p[i] = (int *) i 就可以)。

  可把程序修改如下:

1 int *p[3];
2 for (int i = 0; i < 3; i++)
3 {
4     p[i] = new int(i);
5 }

案例2

  請看小程序:

1 int (*p)[3];
2 p = new int[][3];
3 for (int i = 0; i < 3; i++)
4 {
5     (*p)[i] = i;
6 }

  上邊程序的int (*p)[3]其實相當於int p[3](注意這時p就變成不可更改的左值了)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM