int main()
{
printf("%d %d",1,2,3,4,5);
return 0;
} 输出: 1,2
int main()
{
printf("%d %d",(1,2,3,4,5));
return 0;
}输出:5,无用价值
所以请解释一下为什么加括号/括号会有不同?
发布于 2016-01-22 19:03:26
这一点很重要,因为, (逗号)在C中有多个角色。
在第一种情况下,它用于分隔参数,因此您使用6个参数调用printf()。比所需的更多,这本身可能是一个问题。
在第二种情况下,括号中的逗号是"comma operator",它的作用是计算其左侧,忽略结果,然后计算并返回其右侧。因此,表达式(1,2,3,4,5)与5相同。由于您使用错误数量的参数调用printf(),因此您会得到未定义的行为。
圆括号改变了逗号的解释,从仅仅分隔参数变成逗号运算符。
发布于 2016-01-22 19:03:53
printf(“%d%d”,(1,2,3,4,5));
(1,2,3,4,5)计算到最后一个数字5(检查逗号运算符)。所以第一个输出是5。
第二个输出是一个无用数字,因为它没有与第二个%d控制字符串相对应的数字。这是典型的控制字符串不匹配的错误。
您可能想尝试添加另一个逗号,现在可以看到预期的输出:
printf("%d %d",(1,2,3,4,5), 7 ); // output 5, 7发布于 2016-01-22 19:04:19
在第一种情况下,您有一个(变量-参数)函数参数列表。在第二种情况下,您实际上有一系列特殊的。
这意味着第二个代码将计算为逗号运算符系列中最右侧的操作数5。然后,由于没有更多的参数,printf()将调用未定义的行为并崩溃/打印垃圾。
https://stackoverflow.com/questions/34945105
复制相似问题