C++中int *p[4]和 int (*q)[4]的区别
***************************************************
更多精彩,歡迎進(jìn)入:http://shop115376623.taobao.com
***************************************************
C++中int *p[4]和 int (*q)[4]的區(qū)別
前者是指針數(shù)組,后者是指向數(shù)組的指針。更詳細(xì)地說。
前: 指針數(shù)組;是一個元素全為指針的數(shù)組.【數(shù)組中的元素為指針】
后: 數(shù)組指針;可以直接理解是指針,只是這個指針類型不是int也不是char,而是 int [4]類型的數(shù)組.(可以結(jié)合函數(shù)指針一并看看......)
int*p[4]------p是一個指針數(shù)組,每一個指向一個int型的
int (*q)[4]---------q是一個指針,指向int[4]的數(shù)組。
兩者在定義的時候如下:
int k;
cin>>k;
char *p[2];
p[0]=new char[k];
p[1]=new char[k];
char (*b)[2];
b=new char[k][2];
這樣空說是不是依舊小白?舉個例子
?運(yùn)行結(jié)果:
p的值:0x22ff60
p[0]的值:0x22ff5c? a的地址:0x22ff5c
p[0]地址保存的值:1? a的值:1
p[1]地址保存的值:2? b的值:2
p[2]地址保存的值:3? c的值:3
p[3]地址保存的值:4? d的值:4
q的值:0x22ff30? aa的地址:0x22ff30
q[i]的地址:
0x22ff30
0x22ff40
0x22ff50
0x22ff60
q指向int[4]的所有值:
5 6 7 8
?
以下為網(wǎng)友的解釋,可能闡述得更為細(xì)致。
?
?優(yōu)先級: ?[]? >?*
定義涉及兩個運(yùn)算符:“*”(間接引用)、“[]”(下標(biāo)),“[]”的優(yōu)先級別大于“*”的優(yōu)先級別。
??首先看int *p[4],“[]”的優(yōu)先級別高,所以它首先是個大小為4的數(shù)組,即p[4];剩下的“int *”作為補(bǔ)充說明,即說明該數(shù)組的每一個元素為指向一個整型類型的指針。int *p[4]的存儲結(jié)構(gòu)如下:(存儲方格橫向排列或豎向排列沒區(qū)別,只要按內(nèi)存地址順序排列就行,此處只是為畫圖方便)
????再看int (*q)[4]。它首先是個指針,即*q,剩下的“int [4]”作為補(bǔ)充說明,即說明指針q指向一個長度為4的數(shù)組。int (*q)[4]的存儲結(jié)構(gòu)如下:
請看以下定義:
int a[2][4]={{2,5,6,8},{22,55,66,88}};
int c[4]={5,8,9,4};
int d[3]={23,12,443};
int *p[4],(*q)[4];
q=a;
*p=c;
*(p+1)=d;
則int *p[4]和int (*q)[4]的存儲數(shù)據(jù)為:
驗(yàn)證:
?
| ? |
?
?
| #include <stdio.h> int main(void) { ????int a[2][4]={{2,5,6,8},{22,55,66,88}}; ????int c[4]={5,8,9,4}; ????int d[3]={23,12,443}; ????int *p[4],(*q)[4]; ????q=a; ????*p=c; ????*(p+1)=d; ????int i,j; ????for(i=0;i<2;i++) ????????for(j=0;j<4;j++) ???????{ ???????????if((i==1)&&(j==3)) break; ???????????printf("*(*(p+%d)+%d)=%d\n",i,j,*(*(p+i)+j)); ???????} ????puts("==============="); ????for(i=0;i<2;i++) ???????for(j=0;j<4;j++) ???????????printf("*(*(q+%d)+%d)=%d\n",i,j,*(*(q+i)+j)); ???return 0; } ? 輸出結(jié)果為: *(*(p+0)+0)=5 *(*(p+0)+1)=8 *(*(p+0)+2)=9 *(*(p+0)+3)=4 *(*(p+1)+0)=23 *(*(p+1)+1)=12 *(*(p+1)+2)=443 =============== *(*(q+0)+0)=2 *(*(q+0)+1)=5 *(*(q+0)+2)=6 *(*(q+0)+3)=8 *(*(q+1)+0)=22 *(*(q+1)+1)=55 *(*(q+1)+2)=66 *(*(q+1)+3)=88 |
總結(jié)
以上是生活随笔為你收集整理的C++中int *p[4]和 int (*q)[4]的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机在线应用竖式,App Store
- 下一篇: 高频量化交之李:在华尔街狼舞岁