0

程序:

   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

4 回答 4

7

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

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

于 2012-07-29T16:41:35.670 回答
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.

于 2012-07-29T16:42:13.767 回答
2

3 是两个 printf 返回的值的按位与

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

所以,3是结果3 & 3

于 2012-07-29T16:43:46.047 回答
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

问候。

于 2012-07-29T17:51:56.543 回答