-2

以下代码

int i=0;
while(i<10) {
   printf("%d\n", i++);
}

相当于

int i=0;
while(i<10) {
   printf("%d\n", i); i++;
}

但是下面的代码

int i=0;
while(i<10) {
   printf("%d\n", i+=2);
}

相当于

int i=0;
while(i<10) {
   i+=2; printf("%d\n", i);
}

如何使其等效于

int i=0;
while(i<10) {
   printf("%d\n", i); i+=2;
}

一样i++

4

5 回答 5

8

您也可以编写一个宏来执行此操作。像这样:

#define POSTINC(var, val) ((var) += (val), (var) - (val))

printf("%d\n", POSTINC(i,2));

但更好地使用for或者只是增加下一条语句中的值。

于 2013-05-14T08:51:21.203 回答
4

很好奇我会因为提出以下明显的建议而受到打击:

for(int i = 0; i < 10; i += 2) {
    printf("%d\n", i);
}
于 2013-05-14T08:45:50.933 回答
1

你也许可以用这个

1)

printf("%d",i++?(i++?i-2:(i-2)):(i++?i-2:0));

?引入序列点

没有提到可读性。所以我不介意。

2)

printf("%d",(a++,a++,a-2));

,引入序列点。这里,的括号内充当逗号运算符而不是参数分隔符。

于 2013-05-14T08:47:34.710 回答
0

运算符“++”在 C/C++ 和其他类似 C 的语言中有两个含义
1.如果“++”在变量前面,因此
++i;将首先加一,计算的值将是语句的例如的值: int i=0;
int k;
k=++i;
//k=1 i=1

2.如果“++”在变量后面,
例如i++;,语句的值将是 i 的值,并且 i 加一,例如: int i=0;
int k;
k=i++;
//k=0 i=1

于 2013-05-14T08:46:03.890 回答
0
int i=2;
while(i<10) {
   printf("%d\n", i); i+=2;
}
于 2013-05-14T08:55:26.007 回答