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.
所以你然后返回i10并在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| 归档时间: |
|
| 查看次数: |
119500 次 |
| 最近记录: |