指针与自增优先级的问题

在我们面试时,经常会有一些关于运算符优先级的题目,今天就给大家展示一个常出现的例子。

问题:定义一个数组 int a[10]={1,2,3,4,5,6,7,8,9,0}; int *p=a; 则 cout<<*p++<<endl; 

C++部分运算符优先级顺序

      由此问题我们可以看出来,其想考察的是C++程序设计的运算符的优先级以及后自增的知识点。我们查看优先级表格表格可以得到后自增(++)运算符优先于取值运算符(*),因此(*p++)等价于(*(p++))。

      求值顺序得到了,我们下面的任务就是要分析后自增的实现原理了,我们参考了C++ primer 第五版(503页)讲解的知识如下:

strBlobPtr strBlobPtr::operator++(int)
{  
/*
strBlobPtr为定义的一个类名,operator++(int)为重载后自增运算符,参数int为区分前自增还是后自增
*/
       strBlobPtr ret =*this;
       ++*this;
       return ret;

}

我们发现,在后自增的运算符实现的步骤中,先返回值,再自增,因此(*p++)计算过程为先运算p++(结果为p指向的地址a),再对指针求值*p,得到a[0].

#include<iostream>
using namespace std;
int main() {
	int a[10] = {1,2,3,4,5,6,7,8,9,0};
	int *p=a;
	cout << "*p:" << *p << endl;
	cout << "*p++:" << *p++ << endl;
	return 0;
}



发布了18 篇原创文章 · 获赞 5 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览