Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于C中结构的奇数输出_C_Struct - Fatal编程技术网

关于C中结构的奇数输出

关于C中结构的奇数输出,c,struct,C,Struct,我尝试了一个简单的结构 #include<stdio.h> struct test { int i; int j; }; int main() { struct test t; t.i=1; t.j=2; printf("t:%d, i:%d, j:%d\n", t, t.i, t.j); } 如果我把printf语句改为 printf("i:%d, j:%d\n", t.i, t.j); 输出正确: "i:1, j:2" 为什

我尝试了一个简单的结构

#include<stdio.h>
struct test
{ 
  int i; 
  int j; 
}; 
int main() 
{ 
  struct test t; 
  t.i=1; 
  t.j=2; 
  printf("t:%d, i:%d, j:%d\n", t, t.i, t.j); 
} 
如果我把printf语句改为

printf("i:%d, j:%d\n", t.i, t.j); 
输出正确:

"i:1, j:2" 
为什么第一个不能打印正确的输出?我是不是遗漏了什么? 我在ubuntu上使用gcc。 谢谢

这一行的第一个变量t是一个结构,您试图将其作为数字输出。
由于结构本身没有值,而是包含变量,因此将此结构t称为具有某种整数值,从而导致意外结果。

打印结构时,实际上是打印前2个整数。然后t.i被打印为最后一个整数,然后t.j被忽略。之所以会出现这种情况,是因为您的结构由2个按该顺序放置在内存中的int组成。

您给出的模式
printf()
告诉它应该如何读取参数序列。您告诉
printf()
读取
%d
,但给它一个
struct测试,而不是
int
。这会把整个事情搞砸,因为
struct test
被转储到堆栈中,它比
int
占用的空间要多得多


printf()
模式只能支持原语和指向以null结尾的字符串的指针作为参数。它无法打印
struct

如果试图打印带有%d的“t”,肯定会导致编译器警告。最好不要忽视他们,他们想告诉你一些事情。不,我只是想看看结果如何。无论如何,我假设即使我尝试将结构打印为整数,它也不会影响以下结构成员的输出。所以我很困惑,你说的对!出了差错。当您在int main()中说“struct test t;”时,您创建了一种子结构。由于结构本身没有值,而是包含变量,因此将此结构t称为具有某种整数值会导致意外结果。谢谢。这样我就明白了。
"i:1, j:2" 
printf("t:%d, i:%d, j:%d\n", t, t.i, t.j);