C语言的结构数组的数组名可以当作地址吗?

在我的测试中,声明一个结构体类型的数组,可以利用该结构体数组的数组名赋值给一个指针,并且测试成功,这是否与“单独的机构体名不是该机构体的地址“相矛盾?

所有类型的数组的数组名都是一个地址常量,表示数组首元素的地址,不仅仅结构体数组如此。

比如:

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;


}

这是我运行的截图:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-11-18
这个一点不矛盾。
数组名代表的就是数组的首地址,你定义了一个指针然后给这个指针赋值了一个地址,这有啥问题。
指针就是可以指向地址,数组的首地址也是地址,变量的地址也是地址,都可以赋值给指针。
第2个回答  2021-11-18
您好,很高兴回答您的问题。
在c语言中,数组名就是代表数组的首地址,所以本来数组名就是地址。结构体数组也是数组属于数组中的一种,所以也是满足数组名就是数组首地址的说法。
第3个回答  2021-11-19
任何实体(变量、结构、类对像实例及其数组)名都代表地址,在编译时,编译器会创建一张表,用于映射实体标识符与地址,以便最终用地址替换实体名。我不知道“单独的结构体不是…”出处以及上下文。

如果一定要合理解释使之不矛盾,那就是原文中所谓“单独的结构体”是指结构定义,而不是结构实例,这个和C++中的类及其类对象一个意思,类是结构的升级版,可以包含函数方法,结构只有数据,而结构和类都是定义(图纸),他们的实体/实例是包含数据所以需要占用内存。本回答被提问者采纳
第4个回答  2021-11-19

数组名即该数组首个元素的地址

与结构体名不是结构体的地址不矛盾

一个是数组,一个是变量,不是一个概念,并不矛盾

相似回答