#include <stdio.h>
int main(void)
{
int i = 0;
i = i++ + ++i;
printf("%d\n", i); // 3
i = 1;
i = (i++);
printf("%d\n", i); // 2 Should be 1, no ?
volatile int u = 0;
u = u++ + ++u;
printf("%d\n", u); // 1
u = 1;
u = (u++);
printf("%d\n", u); // 2 Should also be one, no ?
register int v = 0;
v = v++ + ++v;
printf("%d\n", v); // 3 (Should be the …Run Code Online (Sandbox Code Playgroud) c increment operator-precedence undefined-behavior sequence-points
可能重复:
C,C++,Java和C#中的前后增量运算符行为
这是一个测试用例:
void foo(int i, int j)
{
printf("%d %d", i, j);
}
...
test = 0;
foo(test++, test);
Run Code Online (Sandbox Code Playgroud)
我希望得到一个"0 1"输出,但我得到"0 0"什么给了??
我在我的gcc上尝试过这个:
int a=1;
cout<<(--a)--;
Run Code Online (Sandbox Code Playgroud)
输出为0; 但改成它
cout<<--(a--);
Run Code Online (Sandbox Code Playgroud)
导致错误(减值操作数需要左值).有人可以告诉我这件事吗?
谢谢!
可能的重复:
i ++或++ i的效率更高?
我们如何解释表达式的结果(++ x)+(++ x)+(++ x)?
循环中i ++和++ i之间的区别?
我正在尝试这两个程序:
void fun(){
int k = 0;
int i= 10;
k = (i++)+(++i);
cout << k << endl;
}
Run Code Online (Sandbox Code Playgroud)
输出= 22,因为i ++将给出10而++我将评估为12.
但
void fun(){
int k = 0;
int i = 10;
k = (++i)+(++i);
cout << k << endl;
}
Run Code Online (Sandbox Code Playgroud)
输出= 24
它应该是23我猜,还是有些东西我无法看到?
int i=2;
i = ++i + ++i + ++i;
Run Code Online (Sandbox Code Playgroud)
哪个更正确?Java的结果是12或C = 13.或者如果不是正确的问题,请详细说明.
当l值的评估先于 r 值的评估并且赋值也返回一个值时,首先评估以下哪个值?
int i = 2;
int x[] = {1, 2, 3};
int y[] = {4, 5, 6};
int z[] = {7, 8, 9};
x[--i] = y[++i] = z[i++]; // Out of bound exception or not?
Run Code Online (Sandbox Code Playgroud)
注意:具有l值评估的通用C语言首先出现.从我的教科书:
在一些语言中,例如C,赋值被认为是运算符,其除了产生副作用之外还评估如此计算的r值.因此,如果我们用C写:
x = 2;
Run Code Online (Sandbox Code Playgroud)
除了将值2分配给x之外,对这样一个命令的评估返回值2.因此,在C中,我们还可以写:
y = x = 2;
Run Code Online (Sandbox Code Playgroud)
应解释为:
(y = (x = 2));
Run Code Online (Sandbox Code Playgroud) c variable-assignment operator-precedence undefined-behavior
int **arr = (int **)malloc(r * sizeof(int *));
Run Code Online (Sandbox Code Playgroud)
我该如何解释上述C代码的含义?