++i 和 i++ 的区别
- 刚学C语言时,老师和我们讲解过 俩者的区别,俩者的区别就是:
- 在看完一些书籍以后,对其有了进一步的了解:
- 前置版本是将对象本身作为左值返回,
- 后置版本是将对象原始值的副本作为右值返回
区别
- 前置版本的递增运算符避免了不必要的工作,他把值加1后直接返回改变了运算对象;与之相比,后置版本需要将原始值存储下来以便于返回这个未修改的内容。如果我们不需要修改前的值,这将是一种浪费。
- 我们知道作为单独的语句俩者是没有区别的,只有作为右值时才会有区别
++ <> ++
++
++
* 和 递增操作符的优先级
int a[5] = {1, 2, 3, 4, 5};
int *ptr = a;
cout << *ptr++ << endl;
对于 cout << *ptr++ << endl; 这行代码的输出:毫无疑问是 1 虽然结果是肯定的,但可能有些人并不真正理解到底发生了什么。
- 首先 * 的优先级是低于 ++ 的 所以 这行代码等价于 cout << *(ptr++) << endl;
- 对于 ptr++ 是加1以后然后将初始值作为其求值结果返回 所以对于解引用是a[0]的值,但实际上 ptr 已经指向 a[1]
总结
- 方便理解,可以说:前置是先加1在操作,后置是先操作在加1
- 但要真正理解,实际上程序是如何运行的 前置是递增后返回当前值,后置是递增返回原始值
- 对于 * 运算符,递增/递减运算符的优先级是高于它的