*iter++应该怎么理解?

C++Primer中文第四版第141页,写到了*iter++,返回的是iter自增前的解引用值。不太懂,求大神解答... C++Primer中文第四版第141页,写到了*iter++,返回的是iter自增前的解引用值。不太懂,求大神解答 展开
 我来答
jimmyddt1
2011-12-11 · 超过18用户采纳过TA的回答
知道答主
回答量:79
采纳率:0%
帮助的人:47.6万
展开全部
在 int a; int *pa=&a; 之后,*pa完全等价于a,那么*pa++也就是a++了.
追问
。。。很遗憾书上的意思是*iter++输出iter++前指向的值,也就是*iter。。。而且。。“之后,*pa完全等价于a,那么*pa++也就是a++了.”这句话我不太认同。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jdq_37
2011-12-11 · TA获得超过996个赞
知道小有建树答主
回答量:658
采纳率:0%
帮助的人:953万
展开全部
在表达式中出现++,++操作总是在表达式运算完成后才进行。
如:
void main()
{
int a[2]={10,20};
int *pa=a;
int x,y;
x=*pa++;//相当于x=*pa; pa++;两条语句。
//运算完成后x=a[0]=10,pa指向+1,指向a[1]
y=(*pa)++;//相当于y=(*pa);(*pa)++;两条语句。
//运算完成后y=a[1]=20,pa指向不变,但指向的值+1,即a[1]=21
}
楼主参考。
追问
恩你说的有一定道理,书上原话是“子表达式iter++使iter加1,然后返回iter原值的副本作为该表达式的结果。因此,解引用操作*的操作数是iter未加1前的副本”,我想知道这副本是怎么回事?另外,它前面还提到了因为自增操作优先于解引用,所以*iter++等效于*(iter++),这样的话不是应该先自增再解引用吗?
追答
第一个问题:
因为实质是两步操作,第二步操作要修改++的操作数(或表达式),所以此操作数(或表达式)在++操作之前的值被称为副本,只是一个称呼而已,不同的编译器实现的方式也许不一样,但实质都等效于我说的两步操作。
第二个问题:
自增操作优先于解引用(++操作优先于*),这里应该理解为是一种结合的顺序:
在*iter++中,对于变量iter来说,先结合++来运算,还是先结合*来运算呢?如果先结合++,那结果就相当于*(iter++),如果先结合*,就相当于(*iter)++,前者++的操作对象是iter,后者++的操作对象是*iter。
由于c++定义的优先顺序是++先于*,即先结合++,也即*iter++等效于*(iter++)。
不知道这么说你能不能理解。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式