前缀和后缀运算符有什么区别?
以下代码打印值为9.为什么? 这里return(i++)
将返回值11并且由于--i
值本身应为10,任何人都可以解释这是如何工作的吗?
#include main() { int i= fun(10); printf("%d\n",--i); } int fun (int i) { return(i++); }
++
postfix和前缀版本之间有很大的不同。
在前缀版本(即++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。
同样的东西适用于 – 的后缀和前缀版本。
函数在i
递增之前返回,因为您正在使用post-fix运算符(++)。 无论如何, i
的增量不是全局的 – 只是相应的function。 如果您使用了预修复操作符,则它将为11
,然后递减为10
。
所以你然后将i
作为10返回并在printf函数中递减它,这显示9
不是你想象的10
。
字首:
int a=0; int b=++a; // b=1,a=1
在赋值之前,值将增加。
后缀:
int a=0; int b=a++; // a=1,b=0
首先将’a’的值赋给’b’然后增加’a’的值
事实上, return (i++)
只会返回10。
++和 – 运算符可以放在变量之前或之后,具有不同的效果。 如果它们在之前,那么它们将被处理并返回并且基本上被处理就像(i-1)或(i + 1),但是如果你放置++或 – 在i之后,则返回是essentailly
return i; i + 1;
所以它将返回10并且永远不会增加它。
后缀增量++
在评估之前不会增加其操作数的值。 i++
的价值是i
。
前缀减量在评估之前增加其操作数的值。 --i
的值是i - 1
。
前缀递增/递减会在计算表达式之前更改该值。 后缀增量/减量更改后的值。
所以,在你的情况下, fun(10)
返回10,打印--i
打印i - 1
,即9。
i ++是后增量。 增量在返回值后发生。
它与后增量运算符的工作方式有关。 它返回i的值,然后递增该值。
首先,请注意,名为i
的函数参数和main()
中名为i
的变量是两个不同的变量。 我认为这对目前的讨论并不重要,但重要的是要知道。
其次,在fun()
使用postincrement运算符。 这意味着表达式的结果是i
递增之前的值; 简单地丢弃i
的最终值11,并且函数返回10.返回main的变量i
,作为一个不同的变量,被赋值为10,然后递减得到9。
实际上会发生什么是当你使用postfix即i ++时,i的初始值用于返回而不是递增的值。 在此之后,i的值增加1.并且这发生在使用i ++的任何语句中,即在表达式中使用i的第一个初始值然后递增。
而前缀恰好相反。 如果你将返回++ i,则返回增加的值ie 11,这是因为首先执行添加1然后返回它。
说明:
第1步: int fun(int);
这里我们声明函数fun()
的原型。
第2步: int i = fun(10);
变量i被声明为整数类型, fun(10)
的结果将存储在变量i
。
第3步: int fun(int i){ return (i++); }
在fun()
里面我们返回一个值return(i++)
。 它返回10
。 因为i++
是后职业运营商。
步骤4:然后将控制返回到主函数,并将值10
分配给变量i
。
第5步: printf("%d\n", --i);
这里--i
表示预先入职。 因此它打印值9
。
有两个例子说明了区别
int a , b , c = 0 ; a = ++c ; b = c++ ; printf (" %d %d %d " , a , b , c++);
- 这里c的值0c增加1,然后将值1分配给
a = 1
值和c = 1
值 -
下一个语句assiagn值
c = 1
到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);
- 这里在
printf
语句++c
中将c的值增加1然后将新值3赋值给c,这样printf
语句将打印1 1 3
fun(10)返回10.如果你想让它返回11那么你需要使用++ i而不是i ++。
int fun(int i) { return ++i; }