后置自增操作符与解引用,前置自增操作符
来源:互联网 发布:如何赚第一桶金 知乎 编辑:程序博客网 时间:2024/06/01 08:51
char a[ ] = "Hello";
char *p = a;
int i = strlen(a);
while(i > 0){
printf("%c", *p++);
++i;
}
1 之前一直以为printf("%c", *p++);这句话是先解引用再将p指针++的,
但是我还是太年轻了,不然怎么会有Hello而不是ello呢?
2 但是,运算符的优先级显示后置自增操作符(++) 优先级高于解引用(*)
那么输出应该是ello才对啊,但是输出却是Hello
3 因为*p++ 等价于*(p++)没错,只是p++把p的值加1,然后返回p的初始值的
char *p = a;
int i = strlen(a);
while(i > 0){
printf("%c", *p++);
++i;
}
1 之前一直以为printf("%c", *p++);这句话是先解引用再将p指针++的,
但是我还是太年轻了,不然怎么会有Hello而不是ello呢?
2 但是,运算符的优先级显示后置自增操作符(++) 优先级高于解引用(*)
那么输出应该是ello才对啊,但是输出却是Hello
3 因为*p++ 等价于*(p++)没错,只是p++把p的值加1,然后返回p的初始值的
副本作为其求职结果,此时解引用运算符对象是p未增加之前的值。
//================================
NOTE:
除非必要,否则不用递增递减的运算符的后置版本
前置版本递增(或递减)运算符将对象本身作为左值返回,
后置版本则将对象原始值的副本作为右值返回。
建议:除非必须,否则不用递增递减运算符的后置版本。
只是原因非常简单:前置版本的递增运算符避免了不必要的工作,
它把值加1后直接返回改变了的运算对象。
与之相比,后置版本需要将原始值存储下来以便于返回这个未修改的内容。
如果我们不需要修改前的值,那么后置版本的操作就是一种浪费。
对于整数和指针类型来说,编译器可能对这种额外的工作进行了一定的优化;
但是对于相对复杂的迭代器类型,这种额外的工作就消耗巨大了。
0 0
- 后置自增操作符与解引用,前置自增操作符
- 前置后置自增自减操作
- 自增运算符前置与后置区别(i++,++i)
- 重载自增运算符(前置自增++p和后置自增p++)
- 重载流插入和前置与后置自增运算符
- 编译器能否优化后置自增操作符
- 自增、自减、解引用操作符
- 前置和后置自增以及解引用重载函数(++、--、*)
- 重载前置,后置(自增运算符 ++ 和自减运算符 --)
- 重载前置,后置(自增运算符 ++ 和自减运算符 --)
- 重载前置,后置(自增运算符 ++ 和自减运算符 --)
- C++中前置操作符和后置操作符以及解引用的重载
- C++ 前置操作符与后置操作符
- 前置操作与后置操作
- 翻译《有关编程、重构及其他的终极问题?》——29.在迭代器上请使用前置自增操作符(++i),不要使用后置自增操作符(i++)
- Java_语言基础:前置自增和后置自增
- C++自增和自减操作符前置的意义何在?
- 操作符重载前置和后置的区别与实现
- nginx负载均衡和反向代理跨域
- 109Q游戏(8)123/133/146/163/168/172/177(9-15)
- java工程怎么应用其他工程的类中的方法或者本工程其他类中的方法?
- 详解Python的装饰器
- properties文件读取测试3
- 后置自增操作符与解引用,前置自增操作符
- ViewPager 源码分析(一) —— setAdapter() 与 populate()
- Android环境变量配置
- emWin 2天速成实例教程003_Framewin和Window窗口控件和2D绘图
- select 标签 properties文件读取值 未完待续
- 信号量实现线程之间的PV操作
- Linux下的通配符和特殊符号
- 在ShaderToy上研究水波的Shader
- ubuntu 安装与卸载应用总结