关于[指向数组的指针]和[指向数组首元素的指针]的问题

C语言 码拜 8年前 (2016-04-08) 1096次浏览
被一个文字游戏困住了,代码很简单:
int array[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int (*pa)[] = &array;
printf( “pa = %d\n”, pa );
printf( “&array = %d\n”, &array );
printf( “array = %d\n”, array );
结果是这三个输出值都相同
问题描述:
1.array是一个指针常量,它指向数组首元素,它的值也就是&array[0]
2.pa是一个指针变量,它指向数组array,它的值也就是&array
3.所以相对于数组首元素而言,pa是一个二级指针
那么为什么&array和&array[0]会相同呢?这样不是相当于一个指针的地址和它自身存储的值相同了吗?
今天偶然间想到,突然发现有点懵比了,烦请各位高手解答
解决方案

16

&array和&array[0]只是值相同,但意义和类型都是不同的。
其实&array和&array[0]结果都是数组的首地址,但他们的类型是不一样。
&array[0]也即对数组首元素取地址,array+1表示首地址+sizeof(元素类型)。
&array虽然值为数组首元素地址,但类型为:类型 (*)[数组元素个数],所以&array+1大小为:首地址+sizeof(array)。

4

16

1、array不是指针,array是数组类型,数组类型不等于指针,最多说某些情况下可以退化为指针
2、int (*pa)[] = &array; 是错的,实际应该写成:int (*pa)[10] = &array; 此时pa指向的是int[10]类型的数组,而不是指向一个指针, pa的值就是数组的值
3、pa的类型是,int(*)[10],不等于int**,不是二级指针

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于[指向数组的指针]和[指向数组首元素的指针]的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)