基本C编程printf棘手

arc*_*ana 3 c printf

int main()
{

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

  return 0;
} 
Run Code Online (Sandbox Code Playgroud)

输出:1,2

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

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:5,垃圾值

那么请解释为什么添加括号/括号会有所不同?

unw*_*ind 9

它有所不同,因为,(逗号)在C中有多个角色.

在第一种情况下,它用于分隔参数,因此您printf()使用6个参数调用.不仅仅需要,这可能本身就是一个问题.

在第二种情况下,括号内的逗号是"逗号运算符",它具有评估其左侧,忽略结果,然后评估并返回其右侧的效果.所以表达式(1,2,3,4,5)是一样的5.您正在printf()使用错误数量的参数调用未定义的行为.

括号改变了逗号的解释,从仅将参数分离为逗号运算符.