#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
我期待以下代码:
#include<stdio.h>
int main(){
int i = 10;
int j = 10;
j = ++(i | i);
printf("%d %d\n", j, i);
j = ++(i & i);
printf("%d %d\n", j, i);
return 1;
}
Run Code Online (Sandbox Code Playgroud)
表情j = ++(i | i);并j = ++(i & i);会产生错误,左值如下:
x.c: In function ‘main’:
x.c:6: error: lvalue required as increment operand
x.c:9: error: lvalue required as increment operand
Run Code Online (Sandbox Code Playgroud)
但我惊讶于上面的代码编译成功,如下所示:
~$ gcc x.c -Wall
~$ ./a.out
11 11
12 12
Run Code Online (Sandbox Code Playgroud)
半开玩笑地半开玩笑:为什么我不能++i++用C语言,特别是在C#中?
我希望它增加值,在我的表达式中使用它,然后再次递增.
在下面的代码段中,我希望答案为5,但它显示编译时错误:
#include <stdio.h>
int main()
{
int i = 4;
printf("%d", (++i)++);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
是什么原因?.这里++i返回一个l值,所以我们可以增加它吗?
在下面的例子中,我希望foo((&i)++)将计算为foo(4 +地址为(i)),假设int size是4 Byte但是它在此行给出了编译错误
有人有解释吗?
void foo(int*);
int main()
{
int i = 10;
foo((&i)++);
}
void foo(int *p)
{
printf("%d\n", *p);
}
Run Code Online (Sandbox Code Playgroud)