我不确定在printf语句中递增变量是否会将有价值的内容保存到变量中。
int x = 0;
printf("x=%d\n", ++x);
printf("x=%d\n", x);
输出是否
x=1
x=0
或
x=1
x=1
我从未学过C的基础知识,并想知道它与C ++的匹配程度。
我确实理解前/后增量,但我担心在第一个printf()内部执行++ x如果我在函数范围内递增它,则不会保存。
答案 0 :(得分:5)
输出为1。
您的表达式++x
将是
x = x+1;
同时printf()
1
因此,使用预增量运算符修改x的值,并在第二行的printf()
中输出x的新值1
printf()
只打印x
的值,它不会修改您的变量
注意预增量和后增量之间的差异。
通过后递增,您将在第一个printf()中获得0
,因为x
printf()'s
以及之后的%d
会提取x
的值}增加,导致第二个prinf()中x
的值为1
答案 1 :(得分:4)
前/后增量运算符总是修改其操作数的值。
int main(int argc, char **argv) {
int x = 0;
printf("x=%d\n", ++x);
printf("x=%d\n", x);
}
char@char:~$ ./a.out
x=1
x=1
正如其他人所指出的,在这种情况下,后增量运算符将返回0 ......
int main(int argc, char **argv) {
int x = 0;
printf("x=%d\n", x++);
printf("x=%d\n", x);
}
char@char:~$ ./a.out
x=0
x=1
但x的值仍将被修改。
要获得预期的输出,请将 ++ x 替换为 x + 1 。
答案 2 :(得分:1)
增加变量中的值不是基于printf语句。它会 由增量或减量运算符完成。所以增量算子的工作是 将值增加一。
所以它完成了工作。
Output of this would be
x=1
x=1
答案 3 :(得分:1)
不是更改x的printf,C表达式可能有副作用。就像C ++表达式一样。
++ x incrementments x然后返回该值 x ++返回x的值然后递增x。
所以这里的输出是
x=1
x=1
但对于x++
,它将是
x=0
x=1
答案 4 :(得分:1)
printf
系列本身不修改变量(尽管存在内存损坏),但表达式 ++x
将的效果是增加x
然后使用该增量值作为表达式的结果。
但这与printf
无关,表达式正在被评估,因此它可以传递到printf
。
因此,您会看到1 1
而不是1 0
。