C语言中i++与++i的区别

~兰心蕙质~ 2019-06-12 12:28:44
i++是先赋值,再给i加1 ++i是先给i+1,再赋值 比如: i=1; x=i++; 表示x=1, i=2 i=1; x=++i; 表示x=2,i=2
...全文
173 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lin5161678 2019-06-12
  • 打赏
  • 举报
回复
值计算结果不同 副作用相同
qybao 2019-06-12
  • 打赏
  • 举报
回复
原则上,x=表达式,是把表达式的计算结果赋给x
i++表达式,表达式是取i的当前值作为计算结果,然后再i自增1
++i表达式则是先i自增1,然后再取i的最新值作为表达式的计算结果
csucxy 2019-06-12
  • 打赏
  • 举报
回复
1、前置与后置++的操作数都必须是一个左值(关于左值、右值,请查看C/C++标准相关内容)。这里之所以提“左值”,不提“变量”,请看如下示例:

int i = 0;

++i、i++明显合法,因为i是变量,但表达式++(++i)或(++i)++也均合法,但++(i++)、(i++)++非法。因为表达式++i是一个左值,而i++是一个右值。当然变量是一个左值。
2、前置与后置++运算均会让其操作数自加1,其区别在于前置、后置++运算符与操作数所构造的表达式的值不同。如:

int i = 0;

表达式++i的值为1,而表达i++的值为0。即所谓,表达式++i的值为i自加之后i的值,而i++的值则为i自加之前的i的值。但不管是前置还是后置,i均会自加1。
所以int型变量初值i等于0时,如果分别有
int j=++i;

int j=i++;
则变量j的值分别为1和0。
3、尽管++运算符的操作一般为整数型数据类型,但并不是不可以是非整数型。如
float f = 0.3;
float ff = ++f;
也合法,以上语句执行后,ff的值为1.3,但这明显不是一种值得推荐的计算。
4、在计算过程中,表达式++i与变量i对应同一段内存空间,而表达式i++与变量i分别有自己的内存空间。另外,前置++运算效率要高于后置++,其中一个很重要原因是前置++计算既节约了内存空间,也减少的内存空间分配与回收的过程,当然,一般情况下,这种内存空间与CPU运算时间的节约可以忽略。
表达式++i与变量i对应同一段内存空间,也是表达式++i是一个左值表达式的原因。
5、不要试图对右值(如常量)表达式进行++运算。也不要做如下运算:
unsigned int i = 0, j;
j = --i;
以上语句,在编译、运行时均不会报错,但语句执行后,变量i、j值明显不会是-1。

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧