首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基本C编程printf技巧

基本C编程printf技巧
EN

Stack Overflow用户
提问于 2016-01-22 19:00:42
回答 5查看 257关注 0票数 3
代码语言:javascript
复制
int main()
{

  printf("%d %d",1,2,3,4,5);

  return 0;
} 

输出: 1,2

代码语言:javascript
复制
int main()
{
  printf("%d %d",(1,2,3,4,5));

  return 0;
}

输出:5,无用价值

所以请解释一下为什么加括号/括号会有不同?

EN

回答 5

Stack Overflow用户

发布于 2016-01-22 19:03:26

这一点很重要,因为, (逗号)在C中有多个角色。

在第一种情况下,它用于分隔参数,因此您使用6个参数调用printf()。比所需的更多,这本身可能是一个问题。

在第二种情况下,括号中的逗号是"comma operator",它的作用是计算其左侧,忽略结果,然后计算并返回其右侧。因此,表达式(1,2,3,4,5)5相同。由于您使用错误数量的参数调用printf(),因此您会得到未定义的行为。

圆括号改变了逗号的解释,从仅仅分隔参数变成逗号运算符。

票数 9
EN

Stack Overflow用户

发布于 2016-01-22 19:03:53

printf(“%d%d”,(1,2,3,4,5));

(1,2,3,4,5)计算到最后一个数字5(检查逗号运算符)。所以第一个输出是5

第二个输出是一个无用数字,因为它没有与第二个%d控制字符串相对应的数字。这是典型的控制字符串不匹配的错误。

您可能想尝试添加另一个逗号,现在可以看到预期的输出:

代码语言:javascript
复制
printf("%d %d",(1,2,3,4,5), 7 );   // output 5, 7
票数 4
EN

Stack Overflow用户

发布于 2016-01-22 19:04:19

在第一种情况下,您有一个(变量-参数)函数参数列表。在第二种情况下,您实际上有一系列特殊的。

这意味着第二个代码将计算为逗号运算符系列中最右侧的操作数5。然后,由于没有更多的参数,printf()将调用未定义的行为并崩溃/打印垃圾。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34945105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档