当前位置:   article > 正文

指针操作分析——"p++"、"*p++"、"*p=*p+1"、"(*p)++"_指针p++

指针p++

    之前在OpenCV3教程中发现指针运算有时候会用括号把指针变量括起来,有时候则不括起来。所以进行了如下分析来观看各种操作的效果。测试的代码如下:

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int *p;///声明一个指针变量
  6. int n[20];///创建一个简单的数组用于观察指针
  7. for (int i=0;i<20;i++)
  8. {
  9. n[i] = i*10;
  10. }
  11. p= &n [2];///用指针p指向数组中某个元素
  12. ///【1】初始状态
  13. cout << "【1】初始状态" << endl;
  14. cout << " p = " << p << endl;
  15. cout << "*p = " << *p << endl << endl;
  16. ///【2】p++的情况
  17. p++;
  18. cout << "【2】p++的情况" << endl;
  19. cout << " p = " << p << endl;
  20. cout << "*p = " << *p << endl << endl;
  21. p--;///复原
  22. ///【3】*p++的情况
  23. *p++;
  24. cout << "【3】*p++之后" << endl;
  25. cout << " p = " << p << endl;
  26. cout << "*p = " << *p << endl << endl;
  27. *p--;///复原
  28. ///【4】*p=*p+1的情况
  29. *p=*p+1;
  30. cout << "【4】*p=*p+1之后" << endl;
  31. cout << " p = " << p << endl;
  32. cout << "*p = " << *p << endl << endl;
  33. *p=*p-1;///复原
  34. ///【5】(*p)++的情况
  35. (*p)++;
  36. cout << "【5】(*p)++之后" << endl;
  37. cout << " p = " << p << endl;
  38. cout << "*p = " << *p << endl << endl;
  39. return 0;
  40. }

其计算结果非常有趣:

【1】初始状态
 p = 0x6dfeb0
*p = 20

【2】p++的情况
 p = 0x6dfeb4
*p = 30

【3】*p++之后
 p = 0x6dfeb4
*p = 30

【4】*p=*p+1之后
 p = 0x6dfeb0
*p = 21

【5】(*p)++之后
 p = 0x6dfeb0

*p = 21

四种操作的效果总结起来如下:

"p++"的效果:指针向下移动一个单位(对于int变量的数组,指针移动了4字节),指针内的内容并未变化。

"*p++"的效果:指针向下移动一个单位(对于int变量的数组,指针移动了4字节),指针内的内容并未变化。与"p++"效果相同!

"*p=*p+1"的效果:指针不移动,但指针所指的数据有+1效果。

*p=*p+1的效果:指针不移动,但指针所指的数据有+1效果。与"*p=*p+1"效果相同!

结论是:

若要对指针进行移位操作,只需对指针变量本身进行加减。

若要对指针所指的内容进行操作,需要将“取内容的*”和指针变量放在一个括号里(比如"(*p)"),这样才能对指针所指的内容进行操作。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/79757
推荐阅读
相关标签
  

闽ICP备14008679号