c++,逗号表达式

供稿:hz-xin.com     日期:2025-01-13
C++的逗号表达式是什么?

引用
逗号表达式的语法为:
表达式1,表达式2,...表达式n
C++顺序计算表达式1,表达式2,……,表达式n的值。例如:
int
a,b,c;
a=l,b=a+2,
c=b+3;
由于按顺序求值,
所以能够保证b一定在a赋值之后,
c一定在b赋值之后。该逗号表
达式可以用下面3个有序的赋值语句来表示:
a=1;
b=a+2;
c=b+3;
逗号表达式是有值的,这一点是语句所不能代替的。逗号表达式的值为第n个子表达
式的值,即表达式n的值。例如:
int
a,b,c,d;
d=(a=1,b=a+2,c=b+3);
cout<<d<<endl;
输出结果为:
6
上例中输出的结果d即为c的值。
逗号表达式还可以用于函数调用中的参数。例如:
func(n,(j=1,j+4),k);
该函数调用有3个参数,中间的参数是一个逗号表达式。括号是必须的,否则,该函数有4个参数了。逗号表达式作为值的形式,可以用于几乎所有的地方。
C++中,如果逗号表达式的最后一个表达式为左值,则该逗号表达式为左值。例如:
(a=1,b,c+1,d)=5;
//ok:即d=5
->在C中,逗号表达式是不能作左值的,所以
“(a=1,b,c+1,d)=5;”将通不过编译

都好表达式的计算顺序是从左到右的,所以先算括号里的都好表达式,首先是x=4*5,之后计算x*5,而逗号表达式的值是最后一个逗号后面的表达式的值,所以括号中都好表达式的值是 x*5的值,也就是100,在括号表达式中,x被赋值20,整个表达式在计算完括号中的表达式之后,计算x+25这个表达式。题目中的都好表达式整个是由两个表达式组成的,括号中的都好表达式,和最后x+25这两个表达式,而括号中的都好表达式是由一个赋值表达式和一个乘法表达式组成的。

c语言提供一种特殊的运算符,逗号运算符,优先级别最低,它将两式联接起来,如:(3+5,6+8)称为逗号表达式,其求解过程先表达式1,后表达式2,整个表达式值是表达式2的值,如:(3+5,6+8)的值是14。(a=3*5,a*4)的值是60   
逗号表达式的形式如下:   表达式1,表达式2,表达式3,...... ,表达式n   
逗号表达式的要领:   
(1) 逗号表达式的运算过程为:从左往右逐个计算表达式。   
(2) 逗号表达式作为一个整体,它的值为最后一个表达式(也即表达式n)的值。   
(3) 逗号运算符的优先级别在所有运算符中最低。

如果a=5,a=3*5,a*4 的值为?
a=3*5=15,然后整个表达式的值为a*4=15*4=60

如果a=5,a=(3*5,a*4)的值为?
3*5不影响a的值,a=(3*5,a*4)=a*4=5*4=20,等号操作符返回赋值之后的值,所以整个表达式的值为20

如果a=5,(a=3*5,a*4),a+5的值为?
a=3*5=15,a*4不影响a的值,然后整个表达式的值为a+5=15+5=20

逗号表达式的要领:   
(1) 逗号表达式的运算过程为:从左往右逐个计算表达式。   
(2) 逗号表达式作为一个整体,它的值为最后一个表达式(也即表达式n)的值。   
(3) 逗号运算符的优先级别在所有运算符中最低。

三个值分别为60,20,20;
可以用一下代码测试:
void main()
{
int a = 5;
printf("%d ", (a=3*5,a*4));

a = 5;
printf("%d ", (a=(3*5,a*4)));

a = 5;
printf("%d ", ((a=3*5,a*4),a+5));
}

第一个 60
第二个 赋值表达式的值 为 1
第三个 20

取最右一个的值
60 20 20

等于逗号后半句的值

VC++豆号表达式问题达人进!
逗号表达式是这样的:int a = 1, b = 2, c = 3;int d = a*2, b*2, c*2;\/\/逗号表达式 此时d=6;\/\/c*2;

c语言逗号运算符优先级问题:先执行++?
接下来,就是按照逗号表达式d=9+e,e++,e+9;的顺序执行了:①执行第一个表达式d=9+e=9+0=9,把结果9赋值给d,所以得到d是9;②第二个表达式e++,刚才分析过了,这个后自增最后执行,此时什么也不会做 ;③e+9=0+9=9,这仅仅是做了一个加法,而且得数(9)都没有保留!最后,e再自...

大一C语言问题,求解答啊
逗号表达式,从左往右计算,表达式的值为最右边表达式的值 n=i=2,++i,i++整个表达式的值就是i++的值 从左往右计算:n=i=2 i=2 ++i i=3 i++ 返回3,i的值变为4 表达式的值为i++返回的值,所以是3

C语言运算,逗号表达式与自增运算?
根据运算符优先级,原式即(b=a++),b++,++a;逗号表达式的值是最后一项,不是"逗号表达式取最后的值"逗号运算符是"顺序点",所以b=a++,b++,++a;这种写法并不是未定义行为 a自增2次,所以值为9 b首先被赋值7,然后自增一次,值为8

在c语言中, a++等于几?
答案为10。解题过程如下:a=10,a+10,a++是一个逗号表达式,逗号表达式的规则是什么第一表达式计算起,直到计算最后一个表达式,最后一个表达式的值是逗号表达式的值。先计算a=10,值等于10,变量a也被赋10的值。再计算a+10,的值为20.最后计算a++得值为10,a得值为11.但整个表达式的值为10。

for(i=0;i<4;i++,i++) printf("+");输出什么,为什么
循环语句 增量部分 i++,i++ 是逗号表达式 , 可以看成: (i++,i++) , 也就是 i=i+2;循环语句 成为:for(i=0;i<4; i=i+2) printf("+");所以循环 2 次, i = 0 打印 1次,i=2 再打印 1次,i=4 退出循环。输出 ++ ...

int i=1 执行(i,i++,++i)后结果是什么 为什么 新人什么都不懂 没有...
结果是3,(i,i++,++i)是一个逗号表达式,结合性从左往右,逗号表达式的值是最后一个逗号后面的表达式的值,即++i,但是结合性从左往右,所以依次计算i,i++,++i,i=1,i++之后i等于2,++i之后i等于3,整个表达式的值为3,这里要注意最后一个++i,运算符在前,先计算i的值,如果是 (i,...

c语言中是什么意思printf("%d%d\\n",(++x,y++),z+2);
(++x,y++) 这叫逗号表达式,里面含2个表达式,表达式的最终值用最后一个表达式的结果。假定 int x=10,y=1,z=1;++x 前缀加,x 变 11 y++ 后缀加, y 现在不变化,等退出这句再增 1,所以 y=1;逗号表达式的最终值 用最后一个表达式的结果, 就是 1。printf("%d 打出的第一个结果...

C语言中逗号运算符是从左至右?
掌握了以下4点,逗号表达式的运用就不是问题了:1、逗号表达式格式:表达式1,(表达式2,表达式3,... 表达式n)2、逗号表达式的计算过程为:从左往右逐个计算。3、逗号表达式是作为一个整体的,它的最终结果就是最后一个表达式(即表达式n)的值。4、逗号运算符的优先级别是所有运算符中最低的。

c++逗号表达式
你这个a*4并没有给a赋值所以最后是 a\/2=10