有什么区别 i = i + j; 和i += j; 在C?它们是等价的吗?有副作用i吗?
我试图使用GCC编译器检查C中的赋值机制.
它们几乎是一样的.唯一的区别是,i在+=案例中仅评估一次,而在另一种情况下评估两次.
i = i + j相当于但不相同。
在某些情况下(罕见)不同于因为本身有副作用。
还有一个问题是运算符优先级,即i += ji += ji = i + ji
i = i * j + k;
Run Code Online (Sandbox Code Playgroud)
不等于
i *= j + k;
Run Code Online (Sandbox Code Playgroud)
几乎没有区别,但如果i是一个复杂的表达式,它只计算一次.假设你有:
int ia[] = {1, 2, 3, 4, 5};
int *pi = &(ia[0]); // Yes, I know. I could just have written pi = ia;
*pi++ += 10;
// ia now is {11, 2, 3, 4, 5}.
// pi now points to ia[1].
// Note this would be undefined behavior:
*pi++ = *pi++ + 10;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1862 次 |
| 最近记录: |