为什么k++先++后再i+=k,这其中有什么隐藏特性吗?难道这样写是K++;i+=k;的意思吗?

为什么k++先++后再i+=k,这其中有什么隐藏特性吗?难道这样写是K++;i+=k;的意思吗?

img

img

嗨,你的问题就是基本的逗号运算符。。。。
你只要记住两点:

  1. 逗号运算符,计算顺序是从左到右;
  2. 逗号运算符的结果为最右边的计算结果;
    例如,
for (int i = 2, j = i; ;) {

}

这里是先定义了i为2,接着是j被赋值为i,j 也变成了2

再例如,

for (int i = 2, j = (5, i++, 10); ;) {

}

j 的赋值有一系列的逗号运算,其实j 的最后结果为最右边,即 j = 10
如果有什么其他问题,随时欢迎交流~~~

逗号运算符,按顺序运算,结果是最后一个表达式的值
如果用了分号,则for语句格式错误。


int a;
    int b;

    a = 3;
    b=++a,4-2,a+5; //优先级
    printf("b1= %d\n",b); // b=++a=4;

    a = 3; //a值重新赋回来
    b=(++a,4-2,a+5); //结合性
    printf("b2= %d\n",b); // b=((++a)+5)=9;
    return 0;

第一个b,后面赋值表达式中,自加“++”的优先级高于,逗号的优先级,所以给b赋值为++a 为4 。

第二个b,后面有带括号的逗号运算符,所以要自左至右的计算各个表达式的值,但是赋值给b的值,是整个逗号表达式的值,即为最后一个表达式的值a+5,为b=((++a)+5)=9。

供参考:https://baike.baidu.com/item/%E9%80%97%E5%8F%B7%E8%A1%A8%E8%BE%BE%E5%BC%8F/4496335