C中的这两个表达式是否相等?

时间:2015-06-28 15:30:14

标签: c operators equality

a*=b;是否与a*a=b;相同,如果不相同,它的相同之处是什么?

我有点困惑,因为我在这个测试中得到了错误的答案:

    #include<stdio.h>
    main () 
    {   
        int i, j, a=1, b=3; 
        for(j=1; j<3; j++)  
          a*=b;
        b++;
        printf("a=%d", a);
    }

5 个答案:

答案 0 :(得分:2)

a *= b;相当于a = a * b;

*=是一个复合赋值运算符 - 您可以在此处详细了解它们:http://tigcc.ticalc.org/doc/opers.html#assign

这里和其他运营商也有很好的解释: http://www.tutorialspoint.com/ansi_c/c_operator_types.htm

答案 1 :(得分:1)

你得到的“错误”答案是什么,你期望哪一个?请注意,b++之外的循环;如果你想在循环中执行它,可以使用{}为循环体创建一个块

for(j=1; j<3; j++) {
    a*=b;
    b++;
}

除此之外,要回答您的实际问题:What Eoin said,并在此上下文中了解lvalue and rvalue是什么。

答案 2 :(得分:0)

a*=b相当于a = a*b

答案 3 :(得分:0)

a *= b;

编译。

a * a = b;

不编译,给出类似这样的内容:

 error: lvalue required as left operand of assignment

从上面我们可以得出结论:

不,两个表达式都不相等

由于上面的第二个表达式没有编译,你或者没有等价或无休止的。

对于第一个表达式,存在(至少)两个等价物:

a = a * b;

a = b * a

答案 4 :(得分:0)

首先你需要用{}

来关闭for循环
int j;
for(j=1; j<3; j++){
    printf("like this");
}

秒)a * = b与a = a * b相同。 a * a = b试图将b的值存储在名为a * a。

的变量中
int a*a;
int b;
a*a=b;

这不起作用,因为a * a不是有效的变量名。

最后)你的代码的结果,你如何编写它(一旦用{}修复for循环)应该是:

a=3a=12