无法理解C程序参数的输出

无法理解C程序参数的输出,c,C,程序的输出是12。如何计算?这是因为计算了第一个x,y。 表达式中的x,y是从左到右计算的,因为逗号运算符的关联性是从左到右的,所以计算x,y的最后一个值是y。 阅读运算符优先级和关联性规则以及如何在运算符优先级下计算表达式,以了解这些类型的表达式您碰巧使用了 在C和C++编程语言中,由令牌表示的逗号运算符是一个二进制操作符,它计算其第一个操作数并丢弃结果,然后计算第二个操作数并返回该值和类型。 也就是说 #include<stdio.h> int main() { int x=

程序的输出是12。如何计算?

这是因为计算了第一个x,y。 表达式中的x,y是从左到右计算的,因为逗号运算符的关联性是从左到右的,所以计算x,y的最后一个值是y。
阅读运算符优先级和关联性规则以及如何在运算符优先级下计算表达式,以了解这些类型的表达式

您碰巧使用了

在C和C++编程语言中,由令牌表示的逗号运算符是一个二进制操作符,它计算其第一个操作数并丢弃结果,然后计算第二个操作数并返回该值和类型。 也就是说

#include<stdio.h>
int main()
{
  int x=10,y=12;
  printf("%d",(x,y));
  return 0;
}
在功能上等同于

printf("%d",(x,y));

您要计算的表达式是:

printf("%d", y);
此表达式使用逗号运算符。标准6.5.17逗号运算符表示:

逗号运算符的左操作数作为空表达式计算;有一个 其求值与右操作数求值之间的序列点。然后右转 计算操作数;结果有其类型和值

因此,在代码中,x,y计算为y,其值为12

关于更广泛的讨论,请参阅。虽然讨论了C++,但是对于这个操作符的讨论在C的上下文中是有效的,特别是与您的问题相关的是: 各种逗号分隔列表中的逗号,如函数参数列表fa、b、c、初始值设定项列表inta[]={1,2,3},或初始化语句inti、j;不是逗号运算符。如果需要在该上下文中使用逗号运算符,则必须将其括起来:fa、n++、n+b、c

这正是你问题中的情况。如果你写过:

x,y

这样就不用逗号运算符了,您可以向printf提供比格式说明符多一个参数。

您希望它做什么,为什么?您希望它是什么?为什么?wow Slaks-我发誓这不是故意的:你们能提供任何链接来读取操作符优先级和关联性规则吗?@user3416257你们只需要检查表就可以了。也要看一些表达式求值示例。
printf("%d", x, y);