Struct vs. Array:打印第一个值

时间:2017-03-22 21:25:00

标签: c arrays struct

如果我有一个数组,例如:

int v[10] 

我尝试只打印'v',我会在内存中看到数组的位置。

但如果我有结构

struct mystruct{
  int x;
  int y;
}S;

我尝试只打印'S',我会看到x的值,这是结构的第一个成员,但不是地址。
为什么?谢谢。

--- ---编辑
我用简单的printf打印。
对不起我的无知,但这是一种好奇心......

1 个答案:

答案 0 :(得分:1)

因为struct和数组非常不同。当在表达式中使用时,数组会衰减到指向其第一个元素的指针,因此如果您尝试将其作为int打印,则可以将数组的第一个元素的地址转换为int。

另一方面,struct实际上是一个类型,struct的地址是其第一个元素的地址。例如,函数可以返回结构,但返回数组是非法的。当您尝试以int形式打印结构时,将结构的地址传递给printf函数,并以打印结构的第一个元素结束。

但以上所有仅仅是C实现的结果(好的,所有常见的实现在这里表现相同),因为根据标准,传递除了整数之外的任何内容作为printf的参数{ {1}} %d格式的{1}}给出了未定义的结果。

TL / DR:只要您了解C语言及其常见实现

,观察到的结果就不足为奇了