c语言中关于逗号运算符的疑问!

供稿:hz-xin.com     日期:2025-01-13
关于c语言中的逗号运算符???

等下。。答错了。。还需要理解一下神马是逗号表达式。。我前面说的和uuyyhhjj与delta_charlie的意思一样,但其实我们都搞错了。你可以自己把我们的例子都运行一下,看看是不是这样。下面我感觉应该是我正确的理解。
逗号表达式是所有运算符中优先级最低的,比赋值运算符还要低。他的作用就是把每个表达式都算一遍,并且把最后一个表达式返回的值作为逗号表达式的值。(把其他的都不管了)

像你说的那个,如果是
x=200,500;
(没有括号),x就会等于200,然后上面整个式子的值是500。

但是有括号的话, (200,500) 就是一个单独的式子,他的值是500,所以x=(200,500)最后赋值给x就是500

举几个例子,

x=(21,22,23,24,25);
这个里面,先算括号里的,前面的21到24算过后都被丢弃,括号里的表达式的值是25。之后执行赋值运算,x的值就变成括号里表达式的值,25了。
如果编译
int x;
int a;
x=(21,22,23,24,25);
cout<<"x="<<x<<endl;
会输出
x=25

x=21,22,23,24,25;
这行整个是一个表达式。
逗号运算符会分别计算表达式x=21、22、23 、24、25(单独一个数字也可以叫做表达式)。
然后他会用最后一个表达式作为逗号表达式的值。所以整个式子(整个一行)的值是25。但是因为这个值并没有返回给别的变量,他就也被丢弃了。
如果编译
int x;
x=21,22,23,24,25;
cout<<x;
输出是21。

a=(x=21,22,23,24,25);
这个里面,除了给x赋值,它又把逗号表达式的值25赋给a。
如果编译
int x;
int a;
a=(x=21,22,23,24,25);
cout<<"x="<<x<<endl;
cout<<"a="<<a<<endl;

会输出
x=21
a=25

a=(x=21,22,23,24,x*25);这个里,赋值给x之后又利用x计算了逗号表达式的值,21*25,最后把这个值赋给a
如果编译
int x;
int a;
a=(x=21,22,23,24,x*25);
cout<<"x="<<x<<endl;
cout<<"a="<<a<<endl;
会输出
x=21
a=525

简单来说,逗号的作用就是执行每一个表达式,然后用最后一个表达式作为他它的值。
看这个可能可以帮助你理解 http://blog.csdn.net/great_ghoul/article/details/1779768
如有疑问,欢迎您的追问。

一、用法:
1、当顺序点用,结合顺序是从左至右,用来顺序求值,完毕之后整个表达式的值是最后一个表达式的值。
main()
{int a,s,d;
s=2;
d=3;
a=12+(s+2,d+4);
}
先算括号内的值:s+2=4,d+4=7;括号内应为(4,7),括号内取值只取最后一个,如果没有括号则取第一个;a=12+7=19。
x=(y=3,(z = ++y+2) +5);
是首先把y赋值为3,把y递增为4,然后把4加上2,把结果6赋值给z,接下来把z加5最后把x赋为结果值11。
2、注意事项:逗号运算符( , )是C语言运算符中优先级最低的一种运算符。
二、其它用法:
1、在for里面的应用:
int i;int j;
for(i=0,j=0;i<5;i++,j++)
2、当分隔符:int i,j;

扩展资料
运算符优先级:
1、优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。
2、相同优先级中,按结合顺序计算。大多数运算是从左至右计算,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。
3、基本的优先级需要记住:指针最优,单目运算优于双目运算。如正负号。先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 && 7等价于 (1 << (3 + 2))&&7.逻辑运算最后计算。

逗号表达式,按从左到又的顺序依次计算的,把最后一个表达式的值做为逗号表达式的值
所以
printf( ”%d\n ” ,z=(x%y,x/y)) ;

中,z的值就是x/y的值即10/3=3;
a=0;b=0;c=0;
c=(a-=a-5),(a=b,b+3)
而在这c=(a-=a-5)这是一个赋值表达式,作为这个逗号表达式的第一个表达式,而a-=a-5,等价于a=a-(a-5)=0-(0-5)=5
所以c=5

,表示依次计算 把多个算式分开 但是在()里面的话赋值记录为最后一个表达式的值
例如
a=0;b=0;c=0;
c=(a-=a-5),(a=b,b+3);
你这个例如中
c只能为-10
如果加上一个括号
c=((a-=a-5),(a=b,b+3));
那么 a=-10 ,b=0 c=3

逗号运算符应该从左至右一次计算表达式的值 最后整个语句值等于最后一个表达式的值 也就是 z=(x%y,x/y)需先计算出x%y再计算出x/y 然后z=x/y的值
逗号运算符的优先级是最低的 所以c=(a-=a-5),(a=b,b+3) 会先算出a-=a-5的值 赋给c 然后计算(a=b,b+3)这个表达式的值 也就是等于b+3 c最后等于5

z=3;
a=0,b=0,c=5

c语言中关于逗号运算符的疑问!
所以c=5

c语言问题之逗号运算
这是因为 C语言规定啦,逗号运算符的求值顺序,从左到右求值,语言这样 规定是有理由的,比如 int i = 0, j = 1, k;k = (i += 2, j *= i);这里面的 k 值 是由 j *= i 所求的,而 j *= i 里面的i值 依赖 前面 一个 i+=2,如果不先计算 i+=2, j *= i 就会得到错...

C语言逗号表达式的问题 x=6,y=7,z=8 r=func((x--,y--,x+y),z...
1)逗号运算符也称顺序求值运算符,即从左至右顺序执行,最后一个值会覆盖前面的值,所以使用逗号将几个表达式连接起来的带括号的表达式,最终整个逗号表达式的值为最后一个表达式的值。2)自增和自减运算符有前置和后置之分,在混合运算中,前置是先自增或者自减,再进行取值;而后置恰好相反,即先取...

关于逗号运算符问题
t=1,这个没错,t+5,这里t没有变 t++,利用的使用t还是没有变,下一次在用到t的时候,t就变成2了 这是t++的特性(用了以后再变),++t是变了后再用 逗号运算符的最终结果是最后一个表达式的结果,也就是t++的结果,但是这里是用了在自加,所以t还是1 ...

C语言逗号运算符问题
关于逗号运算,是按照从左往右的顺序走的,首先sum++的结果是5,5赋予给了pad,接着pad++的结果是6,最后++pad的结果是7,所以pad的最终值是7。

C语言中一道和逗号运算符有关的题目
最后一个换成pad++ 答案 就是6了(pad=sum++,pad++,pad++;)a++和++a, 前一个先把a用了 然后再给a加一,后一个 先把a自己增加一 然后 再 做运算;例如:x=5;y=++x;x先加到6,然后再将x的值应用到表达式y=x中,y值为6 x,y都为6 x=5;y=x++;x为6,y为5....

C语言逗号表达式的疑问
最后结果应该是i=3,j=2,因为:i++以后,i=3 j=(3,6,2)=2 相信你自己的判断,书是错的。你可以自己试试。我认为教材应该采用一些更实用的例子,解释逗号操作符到底用在什么地方能简化代码,提高效率。语言是用来沟通和解决问题的,而不是用来卖弄的,试问有人会在应用中写这样的代码么?建议多...

c语言小代码,逗号表达式的问题
a=3*5, a*4 你是误会在这里了 =赋值运算比逗号的优先级更高,所以这里是先计算a=3*5=15,然后a*4只是单纯的一个值,并不会有a=a*4这样的计算。所以 里面的逗号运算符最终只做到一个效果 就是a=15 于是最终值是 a=a+5=15+5=20 ...

C语言中逗号表达式的问题
在C语言中,逗号表达式的运算级别是最低的,比赋值运算符的级别还要低。因此,在表达式 y=(x=a+b),(b+c); 中,程序首先会执行x=a+b,得到x=6。接着执行y=x=6,此时y的值同样为6。然而,(b+c)这部分并不影响x和y的值,它仅作为逗号表达式的一部分被计算,最终整个表达式的值是b+c,...

关于逗号表达式的问题
则“(a,b,c)”是一个逗号表达式,它的值等于c的值。括弧内的逗号不是参数间的分隔符而是逗号运算符。括弧中的内容是一个整体,作为printf函数的一个参数。C语言表达能力强,其中一个重要方面就在于它的表达式类型丰富,运算符功能强,因而c使用灵活,适应性强 参考资料:http:\/\/hi.baidu.com\/gwor...