为什么这个C程序的输出是这样的?
节目:为什么这个C程序的输出是这样的?,c,C,节目: int main( ) { printf("%d",printf("%d %d",5,5)&printf("%d %d",7,7)); return 0; } 输出: 5 57 73 我是C语言的新手,我能猜出5577是从哪里来的,但不知道3是从哪里来的。有人能解释一下输出吗?如果您将二进制和应用于3和3(这两个都是嵌套printf调用的返回值),您将得到3 请注意,代码实际上包含未定义的行为,因为嵌套调用的顺序没有定义。函数的返回值是传
int main( )
{
printf("%d",printf("%d %d",5,5)&printf("%d %d",7,7));
return 0;
}
输出:
5 57 73
我是C语言的新手,我能猜出5577是从哪里来的,但不知道3是从哪里来的。有人能解释一下输出吗?如果您将二进制
和应用于3
和3
(这两个都是嵌套printf
调用的返回值),您将得到3
请注意,代码实际上包含未定义的行为,因为嵌套调用的顺序没有定义。函数的返回值是传输的字符数,如果有错误,则返回负值
printf(“%d%d”,5,5)
如果没有错误,则返回3
printf(“%d%d”,7,7)
如果没有错误,也会返回3
因此printf(“%d%d”、5,5)&printf(“%d%d”、7,7)
是3&3
的值,其计算值为两个printf返回的值
printf返回打印的字符数。
在您的例子中,printf(“%d%d”,5,5)
打印了三个字符,分别为两个5和一个空格,类似地,printf(“%d%d”,7,7)
也打印了两个7和一个空格。因此,两个printf都返回3
因此,3是3&3
的结果,如您所见:,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
在这个阶段我们得到:5577
然后3&3=3
,最后您得到了以下输出:
5 57 73
关于。这种类型的代码给C带来了坏名声…请注意,7 75 53
也将是一个有效的结果,因为&
不是标准点(C.f.)。为什么printf(“%d%d”,5,5)返回3?@AshwinSingh,因为这就是printf
返回的结果。打印字符的数量。你是指未指定的行为而不是未定义的行为吗?@哎呀,老实说,我懒得去查。我想这是未指定的。“未指定行为的一个例子是函数参数的求值顺序。”,我很确定操作符在这方面与函数类似。