赞
踩
之前在OpenCV3教程中发现指针运算有时候会用括号把指针变量括起来,有时候则不括起来。所以进行了如下分析来观看各种操作的效果。测试的代码如下:
- #include <iostream>
-
- using namespace std;
-
- int main()
- {
- int *p;///声明一个指针变量
- int n[20];///创建一个简单的数组用于观察指针
- for (int i=0;i<20;i++)
- {
- n[i] = i*10;
- }
- p= &n [2];///用指针p指向数组中某个元素
-
- ///【1】初始状态
- cout << "【1】初始状态" << endl;
- cout << " p = " << p << endl;
- cout << "*p = " << *p << endl << endl;
-
- ///【2】p++的情况
- p++;
- cout << "【2】p++的情况" << endl;
- cout << " p = " << p << endl;
- cout << "*p = " << *p << endl << endl;
- p--;///复原
-
- ///【3】*p++的情况
- *p++;
- cout << "【3】*p++之后" << endl;
- cout << " p = " << p << endl;
- cout << "*p = " << *p << endl << endl;
- *p--;///复原
-
- ///【4】*p=*p+1的情况
- *p=*p+1;
- cout << "【4】*p=*p+1之后" << endl;
- cout << " p = " << p << endl;
- cout << "*p = " << *p << endl << endl;
- *p=*p-1;///复原
-
- ///【5】(*p)++的情况
- (*p)++;
- cout << "【5】(*p)++之后" << endl;
- cout << " p = " << p << endl;
- cout << "*p = " << *p << endl << endl;
-
- return 0;
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
其计算结果非常有趣:
【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)"),这样才能对指针所指的内容进行操作。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。