1

我尝试了一个简单的结构。

#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); 
} 

输出不正确,因为:

"t:1, i:2, j:1 "

如果我将 printf 语句更改为

printf("i:%d, j:%d\n", t.i, t.j); 

输出是正确的:

"i:1, j:2" 

为什么第一个不能打印正确的输出?我在这里错过了什么吗?我在 ubuntu 上使用 gcc。谢谢。

4

3 回答 3

2

您给出的模式printf()告诉它应该如何读取参数序列。你告诉printf()阅读 a%d但给它 astruct test而不是 a int。这弄乱了整个事情,因为struct test它被倾倒在堆栈中,并且它比一个会占用更多的空间int

printf()模式只能支持原语和指向空终止字符串的指针作为参数。它没有能力打印struct.

于 2013-11-09T23:32:22.413 回答
1
printf("t:%d, i:%d, j:%d\n", t, t.i, t.j); 

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

于 2013-11-09T23:29:53.293 回答
0

打印结构时,您实际上是在打印前 2 个整数。然后将 ti 作为最后一个 int 打印。然后 tj 被忽略。发生这种情况是因为您的结构由 2 个 int 组成,它们按该顺序放置在内存中。

于 2013-11-09T23:32:18.573 回答