在我的测试中,声明一个结构体类型的数组,可以利用该结构体数组的数组名赋值给一个指针,并且测试成功,这是否与“单独的机构体名不是该机构体的地址“相矛盾?
所有类型的数组的数组名都是一个地址常量,表示数组首元素的地址,不仅仅结构体数组如此。
比如:
char carr[2];
carr的值等于&carr[0]。
int iarr[3];
iarr的值等于&iarr[0]。
可以用如下代码验证这点:
#include <stdio.h>
int main()
{
char carr[2];
int iarr[3];
printf("carr=%p,&carr[0]=%p\n",
carr,&carr[0]);
printf("iarr=%p,&iarr[0]=%p\n",
iarr,&iarr[0]);
return 0;
}
这是我运行的截图:
数组名即该数组首个元素的地址
与结构体名不是结构体的地址不矛盾
一个是数组,一个是变量,不是一个概念,并不矛盾