前缀和后缀运算符有什么区别?

以下代码打印值为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) 
  1. i被设置为10 (简单)。
  2. 这一行有两件事:
    • i增加到11
    • i值被复制到j 。 所以j现在等于11
  3. 这一行还有两件事:
    • i增加到12
    • i原始值(即11 )被复制到k 。 所以k现在等于11

所以运行代码后, i将是12但jk都是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; }