C 逗号运算符的优先级

C 逗号运算符的优先级,c,C,我是C语言的新手,在理解上面的程序时遇到困难。有人能解释一下程序输出吗?如果您使用-Wall选项编译程序,编译器将警告您: #include<stdio.h> void main(){ int a,b; a=3,1; b=(5,4); printf("%d",a+b); } 这将解释哪个值作为a和b变量的初始值 在这种情况下,a=3 b=4将按顺序计算其每个子表达式,丢弃除最右边的子表达式以外的所有子表达式的值,并计算为最右边的子表达式 此运算符的优先级最低,实际

我是C语言的新手,在理解上面的程序时遇到困难。有人能解释一下程序输出吗?

如果您使用-Wall选项编译程序,编译器将警告您:

#include<stdio.h>
void main(){
  int a,b;
  a=3,1;
  b=(5,4);
  printf("%d",a+b);
} 
这将解释哪个值作为a和b变量的初始值

在这种情况下,a=3 b=4将按顺序计算其每个子表达式,丢弃除最右边的子表达式以外的所有子表达式的值,并计算为最右边的子表达式

此运算符的优先级最低,实际上低于赋值运算符。因此:

test.c: In function ‘main’:
test.c:159:6: warning: right-hand operand of comma expression has no effect [-Wunused-value]
   a=3,1;
      ^
test.c:160:7: warning: left-hand operand of comma expression has no effect [-Wunused-value]
   b=(5,4);
       ^
相当于:

a=3,1;
因此a被赋值为3,然后计算值1。完整表达式的值为1,但此值将被丢弃,因为它没有指定给任何对象

相比之下:

(a=3),1;
括号使逗号运算符首先求值。所以5被评估并丢弃,然后4被评估并分配给b


所以a的值是3,b的值是4。因此,程序将打印a+b,即7。

此表达式语句

b=(5,4);
  a=3,1;
包含两个运算符。第一个是赋值运算符a=3,它将3赋值给a,第二个是逗号运算符。你可以想象它是什么样子 a=3,1。也就是说,它有两个表达式a=3和1的操作数。第二个表达式是不起作用的整型文字1的值

请考虑赋值运算符的优先级高于逗号运算符

在这个表达式语句中

b=(5,4);
  a=3,1;
还有两个相同的运算符:赋值运算符和逗号运算符。但现在逗号运算符被括在括号中。逗号运算符的值是其第二个操作数的值。因此,带有逗号运算符5,4的表达式得到4。该值被分配给b

你终于做到了

  b=(5,4);

输出a和b之和等于3+4=7。

什么输出?一个问题是,如果您要求解释输出,但实际上没有显示任何输出,有些人可能会认为您根本没有编译/构建/运行代码,并且您的帖子是一个徒劳的作业转储。为了避免这种情况,请在问题中尽可能多地提供信息。