程序:
int main( )
{
printf("%d",printf("%d %d",5,5)&printf("%d %d",7,7));
return 0;
}
输出:
5 57 73
我是 C 新手,我可以猜到 5 57 7 来自哪里,但不知道 3 来自哪里。有人可以解释输出吗?
程序:
int main( )
{
printf("%d",printf("%d %d",5,5)&printf("%d %d",7,7));
return 0;
}
输出:
5 57 73
我是 C 新手,我可以猜到 5 57 7 来自哪里,但不知道 3 来自哪里。有人可以解释输出吗?
如果您将二进制AND
应用于3
and 3
(这是两个嵌套printf
调用的返回值),您将得到3
结果。
请注意,代码实际上包含未定义的行为,因为未定义嵌套调用的顺序。
该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
.
3 是两个 printf 返回的值的按位与。
printf 返回打印的字符数。在您的情况下,printf("%d %d",5,5)
打印了两个 5 和一个空格的三个字符,同样printf("%d %d",7,7)
也打印了两个 7 和一个空格。因此两个 printf 都返回 3。
所以,3是结果3 & 3
如您在此处看到的: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
问候。