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
。
我不确定在 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
。