比如*p++等价于*(p++),那为什么右结合是先取*p值,再使p+1,而不是先使p+1再取*p呢
哎,因为我也不是太明白,所以也不知道谁说的对啊,事实上,你们写的我还是有点不明白。。。我可能问题问的也不清楚,为什么*p++不是先运算p=p+1,然后再取*p;而是先取*p,再使p=p+1,也就是p++。
C++中的右结合到底是怎么看的?
答案:4 悬赏:20
解决时间 2021-03-23 01:49
- 提问者网友:优雅ぉ小姐
- 2021-03-22 06:34
最佳答案
- 二级知识专家网友:一只傻青衣
- 2021-03-22 07:36
在*p++中,间接寻址运算符 * 的优先级低于 后缀自增 ++ 的优先级,所以程序执行该语句的时候会先执行高优先级的后缀自增,即先执行p++,然后执行低优先级的间接寻址,即*p
全部回答
- 1楼网友:疯山鬼
- 2021-03-22 09:19
本来是向右运算的,即*(p++)。而自加符号“++”后置了,在P的后面,属于后置运算,出现在表达式中时要遵循“先用后加”的使用规则,所以是先取*p值,再使用p+1.
反之,*++p就与之相反,属于前置运算了
- 2楼网友:劳资的心禁止访问
- 2021-03-22 09:00
给你举个例子,估计你能看得懂
在c++中 *指针操作符和++a前缀++操作符的优先级是相同的
但是可以查表知道这两个操作符的结合顺序都是r-l也就是right to left(从右到左)
所以当出现
int a=0;
*++a;//的时候,因为*和++前缀的优先级相同,但是从右到左执行的,所以*++a的结合顺序是先执行++a,然后再取得*地址
*++a 等价于 *(++a)
- 3楼网友:劳资的心禁止访问
- 2021-03-22 08:46
问题前后矛盾啊……
*p++等价于*(p++),那为什么右结合是先取*p值,再使p+1,而不是先使p+1再取*p呢
自己都知道是等价于*(p++),后面还又说“那为什么右结合是先取*p值,再使p+1”
这个明显自己跟自己过不去啊
右结合是运算符的属性,不是什么时候右结合的问题,比如=号,就只是右结合,没有左结合的时候。为什么*p++等价于*(p++),这个和左结合,右结合就没有关系,纯粹是运算符优先级的问题
++的优先级高于指针运算符*,就好像 a+b*c等价于a+(b*c),你能说+就是右结合吗?不是+还是左结合,只不过乘号*的优先级高而已,不是楼上瞎扯的那些
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯