C语言逗号表达式问题?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言逗号表达式问题?相关的知识,希望对你有一定的参考价值。

如(a=4*5,a*2),a+6;题目要求这个表达式的值,计算机运行结果为40,但是老师说结果为26,我想问一下逗号表达式括号外面的a+6算进逗号表达式了吗?

a+6当然是逗号表达式的一部分。实际上,(a=4*5,a*2),a+6是由两个逗号表达式组成的,(a=4*5,a*2)是第1个逗号表达式,它的计算结果与a+6一起构成了第2个逗号表达式。而逗号表达式的结果是最右边那个子表达式计算的结果。

(a=4*5,a*2)是这样计算的:
因赋值运算的优先级高于逗号表达式,因此,先算a=4*5,结果是a=20,再算a*2,所以逗号表达式(a=4*5,a*2)的结果是40。

所以,第1个逗号表达式计算完后有:
a=20
第2个逗号表达式是40,a+6,经计算后,第2个逗号表达式的结果是26(即最右边那个子表达式a+6的值)。

但如果要输出整个逗号表达式的值,不能用printf("%d",(a=4*5,a*2),a+6);因为这是在调用函数,(a=4*5,a*2),a+6被看成了向函数传递的两个参数(即多传了一个参数a+6),而不是作为一个逗号表达式。因为函数调用会忽略所有多传递的参数,所以,以上的函数调用就相当于printf("%d",(a=4*5,a*2));,输出的是40。而printf("%d",((a=4*5,a*2),a+6));才会输出整个逗号表达式(a=4*5,a*2),a+6的值26,这一点需要注意。
参考技术A

要求这个表达式的值 非常简单,把表达式 赋值给一个变量

再观察 变量的值

参考技术B #include<stdio.h>
int main()

int a;
printf("%d",((a=4*5,a*2),a+6));
return 0;

算进去了,你可能是没加括号直接输出了,这道题应该加上括号,不太严谨,但出题人的意思应该是求((a=4*5,a*2),a+6)

逗号表达式

C语言提供一种特殊的运算符——逗号运算符。用它将两个表达式连接起来。如:

  3+5,6+8

称为逗号表达式,又称为“顺序求值运算符”。逗号表达式的一般形式为

         表达式1,表达式2

逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。例如,上面的逗号表达式“3+5,6+8”的值为14。又如,逗号表达式
  a=3*5,a*4
对此表达式的求解,读者可能会有两种不同的理解:一种认为“3*5,a*4” 是一个逗号表达式,先求出此逗号表达式的值, 如果a的原值为3,则逗号表达式的值为12,将12赋给a, 因此最后a的值为12。另一种认为:“a=3*5”是一个赋值表达式”,“a*4”是另一个表达式,二者用逗号相连,构成一个逗号表达式。这两者哪一个对呢?赋值运算符的优先级别高于逗号运算符, 因此应先求解a=3*5(也就是把“a=3*5”作为一个表达式)。经计算和赋值后得到a的值为15,然后求解a*4,得60。整个逗号表达式的值为60。
  一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式,如(a=3*5,a*4),a+5 先计算出a的值等于15,再进行a*4的运算得60(但a值未变,仍为15),再进行a+5得20,即整个表达式的值为20。
  逗号表达式的一般形式可以扩展为

    表达式1,表达式2,表达式3……表达式n

它的值为表达式n的值。

  逗号运算符是所有运算符中级别最低的。因此,下面两个表达式的作用是不同的:

  ① x=(a=3,6*3)
  ② x=a=3,6*a

  第①个是一个赋值表达式,将一个逗号表达式的值赋给x,x的值等于18。第②个是逗号表达式,它包括一个赋值表达式和一个算术表达式,x的值为3。

  其实,逗号表达式无非是把若干个表达式“串联”起来。在许多情况下,使用逗号表达式的目的只是想分别得到各个表达式的值,而并非一定需要得到和使用整个逗号表达式的值,逗号表达式最常用于循环语句(for语句)中.

  请注意并不是任何地方出现的逗号都是作为逗号运算符。例如函数参数也是用逗号来间隔的。如

  printf("%d,%d,%d",a,b,c);

  上一行中的“a,b,c”并不是一个逗号表达式,它是printf函数的3个参数,参数间用逗号间隔。
如果改写为

  printf("%d,%d,%d",(a,b,c),b,c);

则“(a,b,c)”是一个逗号表达式,它的值等于c的值。括弧内的逗号不是参数间的分隔符而是逗号运算符。括弧中的内容是一个整体,作为printf函数的一个参数。

以上是关于C语言逗号表达式问题?的主要内容,如果未能解决你的问题,请参考以下文章

C语言逗号表达式

C语言逗号表达式

c语言 逗号表达式

C语言 逗号表达式

C语言中逗号表达式的实用意义或者产生的原因?

c语言 求解逗号表达式的值