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);
}
答案 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