pra*_*eep 33 c prefix-operator postfix-operator
以下代码打印值为9.为什么?这里return(i++)
将返回一个值11,由于--i
该值应该是10本身,任何人都可以解释这是如何工作的?
#include<stdio.h>
main()
{
int i= fun(10);
printf("%d\n",--i);
}
int fun (int i)
{
return(i++);
}
Run Code Online (Sandbox Code Playgroud)
Ken*_*nde 54
postfix和前缀版本之间有很大的不同++
.
在前缀版本(即,++i
)中,值i
增加,表达式的值是新值i
.
在后缀版本(即i++
)中,值i
增加,但表达式的值是原始值i
.
让我们逐行分析以下代码:
int i = 10; // (1)
int j = ++i; // (2)
int k = i++; // (3)
Run Code Online (Sandbox Code Playgroud)
i
设置为10
(简单).i
递增到11
.i
复制到j
.所以j
现在等于11
.i
递增到12
.i
(这是11
)被复制到k
.所以k
现在等于11
.所以在运行代码后,i
将12但双方j
并k
会11.
同样的东西适用于后缀和前缀版本--
.
小智 13
字首:
int a=0;
int b=++a; // b=1,a=1
Run Code Online (Sandbox Code Playgroud)
在赋值之前,值将增加.
后缀:
int a=0;
int b=a++; // a=1,b=0
Run Code Online (Sandbox Code Playgroud)
首先将'a'的值赋给'b'然后增加'a'的值
小智 10
之前返回的函数i
会递增,因为您使用的是post-fix运算符(++).无论如何,增量i
不是全局的 - 只是相应的功能.如果您使用了预修复操作符,则会将其11
减少为10
.
所以你然后返回i
10并在printf函数中递减它,这显示9
不像10
你想象的那样.
实际上return (i++)
只会返回10.
++和 - 运算符可以放在变量之前或之后,具有不同的效果.如果它们在之前,那么它们将被处理并返回并且基本上被处理为(i-1)或(i + 1),但是如果你放置++或 - 在i之后,则返回是essentailly
return i;
i + 1;
Run Code Online (Sandbox Code Playgroud)
所以它将返回10并且永远不会增加它.
小智 5
有两个例子说明了差异
int a , b , c = 0 ;
a = ++c ;
b = c++ ;
printf (" %d %d %d " , a , b , c++);
Run Code Online (Sandbox Code Playgroud)
a = 1
和值c = 1
下一条语句c = 1
将 b 的值分配给 b 然后将 c 增加 1,所以值b = 1
和值c = 2
在printf
语句中我们有c++
这意味着 c 的原始值是 2 将打印然后将 c 增加 1 所以printf
语句将打印1 1 2
并且 c 现在的值是 3
你可以使用http://pythontutor.com/c.html
int a , b , c = 0 ;
a = ++c ;
b = c++ ;
printf (" %d %d %d " , a , b , ++c);
Run Code Online (Sandbox Code Playgroud)
printf
语句++c
将首先将 c 的值增加 1 然后将新值 3 分配给 c 所以printf
语句将打印1 1 3