指针数组的数组名表示什么?
发布网友
发布时间:2022-05-01 10:00
我来回答
共2个回答
热心网友
时间:2023-10-06 08:06
指针数组的数组名就是该指针数组首元素的地址的别名。
比如,一个人可以叫王小二,也有叫它小二,或者小王,其实都是指同一个人。
指针数组就比如这个例子:int
*p[10]
那么p等价于&p[0]
因为指针里面存储的是地址(十六进制数),所以&p[0]这里面存放着一个int变量的地址。
是不是觉得用地址来存放地址有点想不通,下面举一个简单的例子:
比如
int
*p[10];
可以把&p[0]看成一张记录着地址的纸,那么根据这张纸的地址找到某个仓库,在仓库里面又放着记录着一个int变量地址的纸,又根据这个地址找到了存放int变量的仓库,在这个仓库里面放着int的值,其实就想寻宝一样,根据一关一关的线索找到指定的宝藏。
热心网友
时间:2023-10-06 08:06
数组名只有在sizeof()中表示数组,在其他情况下都是表示数组首元素的指针。int
a[2][3]中数组名a表示数组首元素a[0]的地址,a[0]的类型是int
[3],因此a的类型是int
(*)[3]。
printf("p=%p\n",p);
//打印的是二维数组的首地址
printf("a[1][2]=%d\n",*(p+5));
//
打印的是元素a[1][2]的值,这是因为p+5时p的值加上5*sizeof(int),此时p的值正好是元素a[1][2]的地址
printf("a的地址=%p\n",a);
//打印数组的首元素的地址
printf("a的值=%p\n",*a);
//打印的是数组a[0]的首元素的地址,即a[0][0]的地址,这是因为a是数组指针,*a是数组,数组名在除sizeof之外,都表示首元素的地址
printf("a[1][2]=%d\n",*(*(a+1)+2));//打印元素a[1][2]的值,这是因为*(a+1)表示a[1],(*(a+1)+2)表示数组a[1]的第二个元素的地址