C编程:+ = vs = +

时间:2011-02-16 02:29:53

标签: 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");
}

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

所以C大师:

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

4 个答案:

答案 0 :(得分:23)

他错了; +==+完全不同。

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

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

答案 1 :(得分:14)

你的教授正在记住C的古代版本,其中=+=-=*等确实与{{1}相同},+=-=等。(我们说的比这里通常称为“K&amp; R”的版本旧版本。版本6 UNIX,如果内存服务。)

当前的版本的C中,它们并不意味着相同的东西;具有等号的版本将首先被解析,就好像在等于和之后的任何内容之间存在空格。这恰好产生了*==-的有效程序(尽管不是符合预期的程序),因为=+-可以用作一元运算符。< / p>

+=*可用于解决争论。 =/会将a *= 3乘以3,a会将其除以3,但a /= 3是语义错误(因为一元a =* 3只能应用于指针)和*是语法错误(因为a =/ 3 不能用作一元运算符。)

答案 2 :(得分:3)

代码

myArray[i] += 3 + i;

将产生myArray[i] = myArray[i] + 3 + i;

,而

myArray[i] =+ 3 + i;

收益myArray[i] = 3 + i

这就是我得到的。

答案 3 :(得分:1)

+也是-的一元运算符。