printf 会改变变量吗?

Does printf alter variables?

我不确定在 printf 语句中递增变量是否会将值保存到变量中。

int x = 0;

printf("x=%d\n", ++x);
printf("x=%d\n", x);

输出会是

x=1
x=0

x=1
x=1

我从未学过 C 的基础知识,想知道它与 C++ 的匹配程度如何。

我确实理解 pre/post 递增,但我担心如果我在函数范围内递增它,在第一个 printf() 中执行 ++x 将不会保存。

输出将为 1。

你的表情 ++x 将是

x = x+1;

printf() 中你得到 1

所以 x 的值在这里用预递增运算符修改,在第二行的 printf() 中打印出 x 的新值,即 1

printf() 只是打印 x 的值,它不会修改你的变量

注意pre-increment和post-increment的区别。

使用 post-increment,您将在第一个 printf() 中得到 0,因为 x 的值是由 printf()'s %d 获取的之后 x 递增,导致第二个 prinf() 中 x 的值变为 1

pre/post-increment 运算符总是修改其操作数的值。

 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

正如其他人指出的那样,post-增量运算符在这种情况下将 return 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

增加变量中的值不是基于 printf 语句。它会 由递增或递减运算符完成。所以增量运算符的工作是 将值加一。

所以它完成了工作。

Output of this would be 
x=1
x=1

改变 x 的不是 printf,而是 C 表达式可能有副作用。就像 C++ 表达式一样。

++x 递增 x 然后 returns 该值。
x++ returns x 的值然后递增 x。

所以这里的输出是

x=1
x=1

但对于 x++ 它将是

x=0
x=1

printf 系列本身不会修改变量(尽管存在内存损坏)但是 表达式 ++x 会, 其效果是递增 x 然后使用递增的值作为表达式的结果。

但这与 printf 无关,正对表达式求值,因此它可以 传递 printf.

所以你会看到 1 1 而不是 1 0