指针与数组名的关系
1.對(duì)于一維數(shù)組 a[10],一級(jí)指針p
p=a;//把數(shù)組名(常量地址)賦值給了指針p(正確)
因?yàn)閜是int指針,而數(shù)組名相當(dāng)于int 常量,所以正確。
p=&a;//編譯時(shí)就會(huì)出現(xiàn)錯(cuò)誤,會(huì)顯示警告:從不兼容的指針類型賦值。
那是因?yàn)?amp;a是取數(shù)組a的地址,相當(dāng)于int()[10]類型的數(shù)組指針,而指針p只是普通的一級(jí)指針,指向int型變量,不能隨便賦值。
2.對(duì)于二維數(shù)組名與二級(jí)指針
定義:int a[2][5];
int **pa;
pa=a;//編譯時(shí)會(huì)出現(xiàn)錯(cuò)誤,會(huì)顯示警告:從不兼容的指針類型賦值。
那是因?yàn)閍指向一維的int數(shù)組。內(nèi)存大小為sizeof(int)*數(shù)組長度;
而數(shù)組只是指向一個(gè)int *類型指針,內(nèi)存大小為4,所以他們指向的類型是不相同的,不等價(jià),因而無法將二維數(shù)組名賦值給二級(jí)指針。
3.對(duì)于二維數(shù)組名只能通過數(shù)組指針實(shí)現(xiàn)
例如:
int a[2] [5];
int *p[5];
p=a;//此時(shí)編譯正確。二者等價(jià),都是指向含有五個(gè)元素的一維數(shù)組。
相應(yīng)的可以參考下面的代碼:
#include<stdio.h>
int main()
{
int b[5],a[2][4];
int p,(*pa),(*p1)[4],(*p2)[4];
p=b;
pa=&p;
*pa=b;
p1=a;
printf("%p\n",p1);
printf("%p\n",*p1);
p2=a+1;
p1++;
printf("%p\n",p);
printf("%p\n",pa);
printf("%p\n",*pa);
printf("%p\n",p1);
printf("%p\n",*p1);
printf("%p\n",p2);
printf("%p\n",*p2);
return 0;
}
總結(jié)
- 上一篇: 一维数组名与二维数组名的关联
- 下一篇: LinuxC-运算符