下图是代码,求大神给我讲解一下这句话的运算过程 c=(a-=a-5),(a=b,b+3);以及中间逗号的意思
首先,请搞明白一种表达式叫逗号表达式,就是将一组语句连着写出来,中间用逗号分隔;表达式的取值是最后一个语句的取值。
c=(a-=a-5),(a=b,b+3); 这个语句是一个逗号表达式,前面的语句是c=(a-=a-5);后面的语句是(a=b,b+3);后面的语句也是个逗号表达式,整个表达式的值没有处理,所以不关心。
计算:
a-=a-5;即a-=-5;即a+=5;结果a=5
c=(a-=a-5)结果c=5,a=5
a=b结果a=0
b+3运算了等于3但没有保存结果,对a,b,c的值不产生影响
(a=b,b+3)的值是3,即b+3的结果,但这个结果也没有保存,对a,b,c的值不产生影响
最终:a=0,b=0,c=5
如果按照你这么说C的值是逗号运算符里面的最后一个,那C的值应该是3才对,为什么编译出来的结果是C的值是5呢?
c=(a-=a-5),(a=b,b+3); (不是运算最后一个b+3 ?)
你误解了,c的值是左面括号里运算结果的值,也就是说c等于5;
然后计算逗号右面括号,先计算a = b, 把b的值0赋与a,此时a等于0;再计算b+3,b就等于3,第二个括号里没有运算c的值,所以c并没有改变.
值得一提的是,由于逗号比赋值优先级低,所以c=(A,B),(C,D)实际上是
c=(A,B),返回的是B