为什么打印结构变量会给出第一个元素的值?

des*_*nth 1 c

考虑以下代码:

#include<stdio.h>

struct s{
  int i;
} C;

int main(){
  C.i=8;
  printf("%u %u",C,C.i);
}
Run Code Online (Sandbox Code Playgroud)

输出:

8  8
Run Code Online (Sandbox Code Playgroud)

为什么打印C给出第一个元素的值?

Grz*_*ski 6

你不应该以任何方式依赖它,因为它是未定义的行为.在传递a时,%u格式说明符需要一个类型的表达式.对于类型使用或.unsigned intstruct Cint%d%i

结果8就像结构一样,通过值传递任何其他对象.它只有一个成员,因此很可能它具有相同的大小,作为int类型的对象.换一种说法:

sizeof(int) == sizeof(struct C)
Run Code Online (Sandbox Code Playgroud)

成立.该printf()函数将struct对象解释为unsigned int,因此您获得相同的数字.