如果我有一个数组,例如:
int v[10]
我尝试只打印'v',我会在内存中看到数组的位置。
但如果我有结构
struct mystruct{
int x;
int y;
}S;
我尝试只打印'S',我会看到x的值,这是结构的第一个成员,但不是地址。
为什么?谢谢。
--- ---编辑
我用简单的printf打印。
对不起我的无知,但这是一种好奇心......
答案 0 :(得分:1)
因为struct和数组非常不同。当在表达式中使用时,数组会衰减到指向其第一个元素的指针,因此如果您尝试将其作为int打印,则可以将数组的第一个元素的地址转换为int。
另一方面,struct实际上是一个类型,struct的地址是其第一个元素的地址。例如,函数可以返回结构,但返回数组是非法的。当您尝试以int形式打印结构时,将结构的地址传递给printf
函数,并以打印结构的第一个元素结束。
但以上所有仅仅是C实现的结果(好的,所有常见的实现在这里表现相同),因为根据标准,传递除了整数之外的任何内容作为printf
的参数{ {1}} %d
格式的{1}}给出了未定义的结果。
TL / DR:只要您了解C语言及其常见实现
,观察到的结果就不足为奇了