typedef和#define的不同之处

++i 和 i++ 的区别

  • 刚学C语言时,老师和我们讲解过 俩者的区别,俩者的区别就是:
    • ++i 是先加1再操作
    • i++ 是先操作在加1
  • 在看完一些书籍以后,对其有了进一步的了解:
    • 前置版本是将对象本身作为左值返回,
    • 后置版本是将对象原始值的副本作为右值返回

区别

  • 前置版本的递增运算符避免了不必要的工作,他把值加1后直接返回改变了运算对象;与之相比,后置版本需要将原始值存储下来以便于返回这个未修改的内容。如果我们不需要修改前的值,这将是一种浪费。
  • 我们知道作为单独的语句俩者是没有区别的,只有作为右值时才会有区别
    i++; // <==> ++i;

    int a = i++;
    //int a = ++i;
    此时俩者的结果不同

* 和 递增操作符的优先级

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
  • 但要真正理解,实际上程序是如何运行的 前置是递增后返回当前值,后置是递增返回原始值
  • 对于 * 运算符,递增/递减运算符的优先级是高于它的

猜你喜欢

转载自blog.csdn.net/zhoujy1996/article/details/80457651