printf会改变变量吗?

时间:2015-01-19 07:44:38

标签: c printf increment

我不确定在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如果我在函数范围内递增它,则不会保存。

5 个答案:

答案 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