c语言中i++与++i的区别及运行效率
来源:互联网 发布:zend studio mac 编辑:程序博客网 时间:2024/06/05 19:24
在c语言我们会经常把i++与++i弄混淆。
i++ 是先使用,再自加(其自加是在遇到结束标志时才会进行)
即a = i;i=i+1;
++i 是先自加,再使用
即 i=i+1; a= i;
例如以下程序:
#include <stdio.h>
int main()
{
int i = 2;
int num;
num = (++i)+(++i)+(++i)+(++i);
printf("%d%d\n",num,i);
return 0;
}
其输出结果为:num = 19; i = 6。
其运算过程是:num = 4+4+5+6 = 19
i = i+4=6
#include <stdio.h>
int main()
{
int i = 2;
int num;
num = (i++)+(i++)+(i++)+(i++);
printf("%d%d\n",num,i);
return 0;
}
其运行结果为:num = 8;i = 6。
其运算过程是:num = 2+2+2+2 =8
i = i+4=6
我们在遇到像这样的i++,++i之类的可以这样看,把i++看做常量,把++i看做变量如:将i 初始化为2,func是一个函数func(++i,i++)的结果为func(4,2);
函数的传参是从右边开始的,首先把i++看做是常量,++i看做变量,i的初始值是2,所以i++的值为2,++i的值为i,然后执行i=i+1,i=i+1,i的最后结果是4,所以++i的值就是4,所以结果为func(4,,2)。像func(i++,++i)的结果就是func(3,4);首先i=i+1,i = 3,所以i++的值为3,++i的值为i,然后再执行i = i+1,i的值为4,所以结果为func(3,4)。
i++与++i的效率
是内建数据类型时,它们的效率差别不大(去除编译器优化的影响)。所以在这种情况下我们大可不必关心。
自定义数据类型(主要是指类)时,此时我们不需要再做很多汇编代码的分析了,因为前缀式(++i)可以返回对象的引用,而后缀式(i++)必须产生一个临时对象保存更改前对象的值并返回(实现过自定义类型++运算符定义的就知道),所以导致在大对象的时候产生了较大的复制开销,引起效率降低,因此处理使用者自定义类型(注意不是指内建类型)的时候,应该尽可能的使用前缀式地增/递减,因为他天生体质较佳。
所以
内建数据类型的情况,效率没有区别。
自定义数据类型的情况,++i效率较高。
- c语言中i++与++i的区别及运行效率
- 在C语言中 i++与++i的区别
- 整理:i++ 与 ++i 的本质区别及效率
- PHP中的i++与++i的区别及效率
- i=i+1与i+=1的区别及效率
- i=i+1与i+=1的区别及效率
- i=i+1与i+=1的区别及效率(Java)
- i=i+1与i+=1的区别及效率
- 【C语言】语法--++i与i++的区别
- c语言中i++和++i的区别
- c,c++语言中 i++ 与 ++i
- 【c语言】i++和++i的区别
- c语言中i++与++i的使用技巧
- ++i 与i++的效率
- ++i 与 i ++的区别与效率问题
- for循环中++i与i++的执行效率与区别
- c语言中i++,++i的计算
- java中i++与++i的区别
- [TJOI2016]游戏——二分图匹配
- 【项目管理和构建】——Maven下载、安装和配置(二)
- JS多重对象调用的小例子
- socket的使用
- 【转】 OO七大原则
- c语言中i++与++i的区别及运行效率
- 机器学习(一)初识机器学习
- [ 前端工程 ] 静态资源缓存的处理方式
- 16年春前端笔记
- 枚举移除LoadImageNotifyRoutine
- 安卓仿ios页面跳转和回调
- WEB前端 | JS基础——(9-3)事件冒泡与绑定
- dp uva1218
- 几个网络通信协议的比较