指针与自增优先级的问题

本文探讨了C++面试中常见的指针与后自增运算符优先级问题。通过一个例子展示了当定义数组和指针后,`*p++`的运算顺序。解释了后自增运算符的优先级高于取值运算符,并且详细解析了后自增运算符的实现原理,即先返回值再进行自增操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

问题:定义一个数组 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() {
	i
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值