C编程:+ = vs = +

A S*_*ent 8 c operators

我和我的教授正在讨论C中的+ =运算符.他说+ =或= +会起作用,但他不确定为什么= +有效.

int main()
{
    int i = 0, myArray[5] = {1,1,1,1,1};

    while(i < 5)
    {
            myArray[i] += 3 + i;
            printf("%d\n", myArray[i]);
            i++;
    }

    system("pause");
}
Run Code Online (Sandbox Code Playgroud)

输出将产生4,5,6,7,8.将+ =运算符更改为= +会产生相同的结果.但是 - =与= - 不一样(这很明显,因为它将3视为3).

所以C大师:

  • 为什么这与= +一起使用?
  • C编译器如何处理= +与+ =?

SLa*_*aks 23

他错了; +=完全不同于=+.

表达式x =+ 3被解析为x = (+3).
在这里,+成为(相当无用的)一元运算+符.(否定的反面)

使用一元否定运算符将表达式x =- 3解析为x = (-3).


zwo*_*wol 14

你的教授也是为了纪念古代下,在该版本中=+,=-,=*等其实也意味着同样的事情+=,-=,*=等(我们谈论的不是一般被称为"K&R"这里的版本旧.第6版UNIX,如果没有记错.)

当前版本的C中,它们并不意味着相同的东西; 具有等号的版本将首先被解析,就好像在等于和之后的任何内容之间存在空格.这种情况产生一个有效的程序(虽然不是一个程序,做你所期望的),用于=-=+,因为-+可作为一元运算符.

=*或者=/可以用来解决争论. a *= 3将乘a三个人,且a /= 3将三个划分它,但a =* 3是语义误差(因为一元*只能被应用到指针)和a =/ 3语法错误(因为/可以被用作一元运算符).