在我们面试时,经常会有一些关于运算符优先级的题目,今天就给大家展示一个常出现的例子。
问题:定义一个数组 int a[10]={1,2,3,4,5,6,7,8,9,0}; int *p=a;
则 cout<<*p++<<endl;
由此问题我们可以看出来,其想考察的是C++程序设计的运算符的优先级以及后自增的知识点。我们查看优先级表格表格可以得到后自增(++
)运算符优先于取值运算符(*
),因此(*p++)
等价于(*(p++))
。
求值顺序得到了,我们下面的任务就是要分析后自增的实现原理了,我们参考了《C++ primer 第五版》(503页)讲解的知识如下:
1 | strBlobPtr strBlobPtr::operator++(int) { |
我们发现,在后自增的运算符实现的步骤中,先返回值,再自增,因此(*p++
)计算过程为先运算p++
(结果为p
指向的地址a
),再对指针求值*p
,得到a[0]
.1
2
3
4
5
6
7
8
9
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;
}
赏
使用支付宝打赏
使用微信打赏
若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏