以下代码打印值 9。为什么?这里 return(i++)
将返回值 11,由于 --i
该值本身应该是 10,谁能解释一下这是如何工作的?
#include<stdio.h>
main()
{
int i= fun(10);
printf("%d\n",--i);
}
int fun (int i)
{
return(i++);
}
最佳答案
++
的后缀版本和前缀版本之间存在很大差异.
在前缀版本(即 ++i
)中, i
的值递增,表达式的值是 i
的新值.
在后缀版本(即 i++
)中, i
的值递增,但表达式的值是 i
的原始值.
我们来逐行分析以下代码:
int i = 10; // (1)
int j = ++i; // (2)
int k = i++; // (3)
-
i
设置为10
(简单)。 - 这一行有两件事:
-
i
增加到11
. i
的新值被复制到j
。所以j
现在等于11
.
-
- 这一行还有两件事:
-
i
增加到12
. i
的原始值(即11
)被复制到k
中。所以k
现在等于11
.
-
运行代码后,i
将为 12,但两者都是 j
和k
将会是 11。
相同的内容适用于 --
的后缀和前缀版本.
关于c - 前缀和后缀运算符有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43874698/