指针与数组名的关系
1.對于一維數(shù)組 a[10],一級指針p
p=a;//把數(shù)組名(常量地址)賦值給了指針p(正確)
因為p是int指針,而數(shù)組名相當于int 常量,所以正確。
p=&a;//編譯時就會出現(xiàn)錯誤,會顯示警告:從不兼容的指針類型賦值。
那是因為&a是取數(shù)組a的地址,相當于int()[10]類型的數(shù)組指針,而指針p只是普通的一級指針,指向int型變量,不能隨便賦值。
2.對于二維數(shù)組名與二級指針
定義:int a[2][5];
int **pa;
pa=a;//編譯時會出現(xiàn)錯誤,會顯示警告:從不兼容的指針類型賦值。
那是因為a指向一維的int數(shù)組。內(nèi)存大小為sizeof(int)*數(shù)組長度;
而數(shù)組只是指向一個int *類型指針,內(nèi)存大小為4,所以他們指向的類型是不相同的,不等價,因而無法將二維數(shù)組名賦值給二級指針。
3.對于二維數(shù)組名只能通過數(shù)組指針實現(xiàn)
例如:
int a[2] [5];
int *p[5];
p=a;//此時編譯正確。二者等價,都是指向含有五個元素的一維數(shù)組。
相應的可以參考下面的代碼:
#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é)
- 上一篇: 一维数组名与二维数组名的关联
- 下一篇: liunxC下零碎知识点的总结