为什么这个C程序的输出?

时间:2012-07-29 16:40:01

标签: c

计划:

   int main( )
    {
    printf("%d",printf("%d %d",5,5)&printf("%d %d",7,7));
    return 0;
    }

输出:

5 57 73

我是C的新手,我可以猜到5 57 7来自哪里,但不知道3来自哪里。有人可以解释输出吗?

4 个答案:

答案 0 :(得分:7)

如果您将二进制AND应用于33(这两个嵌套printf调用的返回值),则会得到3

请注意,代码实际上包含未定义的行为,因为未定义嵌套调用的顺序。

答案 1 :(得分:6)

printf函数的返回值是传输的字符数,如果有错误则返回负值。

如果没有错误,

printf("%d %d",5,5)会返回3

如果没有错误,

printf("%d %d",7,7)也会返回3

因此printf("%d %d",5,5) & printf("%d %d",7,7)3 & 3,评估为3

答案 2 :(得分:2)

3是两个printf返回的值的Bitwise AND

printf返回打印的字符数。 在您的情况下,printf("%d %d",5,5)打印了三个字符,分别是两个5和一个空格,同样printf("%d %d",7,7)也打印了两个7和一个空格。因此printf都返回3.

所以,3是3 & 3

的结果

答案 3 :(得分:0)

如你所见:http://en.wikipedia.org/wiki/Printf_format_string,printf返回打印字符的数量,所以:

printf("%d",printf("%d %d",5,5)&printf("%d %d",7,7));

由以下内容组成:

printf("%d %d",5,5) return 3 (5 space and 5) and print 5 5

printf("%d %d",7,7) return 3 (7 space and 7) and print 7 7

在这个阶段,我们得到了:5 57 7

而且3 & 3 = 3,最后你得到了这个输出:

5 57 73

问候。