C++中a是一个char指针 如果char*a="bcd" *++a与*a++以及*(a++)结果会有什么不同呢?

 我来答
庄政警
2013-10-11 · TA获得超过9916个赞
知道大有可为答主
回答量:1113
采纳率:94%
帮助的人:866万
展开全部
*a++和*(a++)是一样的,++优先级高于* ,所以a是和++连在一块的,和有没括号没关系,因为是后++,所以a在这个表达式中的值是它的当前值,在这个表达式求值完毕后,才执行a=a+1,这个次序和优先级是两回事
同样的道理*++a和*(++a)也是一回事,前++的特性使得a在这个表达式中的取值是a自增一次后的值,也就是说在表达式求值前先使得a=a+1,然后才求表达式的值
所以
*a++和*(a++)一样 都是先取a的值(就是字符串中字符b的地址)然后求*a 就是'b' ,求值完成后 a+=1,a指向第二个字符c了
*++a和*(++a)一样,先让a增加1个单位,a+=1,a指向第二个字符了,然后取*a 就是'c'了。

开始学习时很容易把自增运算符和优先级概念混淆,前面两位就是
追问
您好,我的教材是钱能出的C++程序设计教程(第二版),这上面说的是间址符*与自增++自减符优先级是一样的,都是第三级,在教材中(P106)有这么一段。

int* p;
//...
*p++

中先做p++再做*操作,即*(p++)
就是这段话让我迷糊了,不知道是书中错误还是自己理解问题,还请您赐教!
追答

哦,是同级的,但结合性是从右往左的,所以*p++和*(p++)是一样的,

 

钱能的书中所说的 “先做p++再做*操作,即*(p++)” 也是正确的,因为表达式p++的值就是p而不是p+1,那么先求p++返回当前的p,  再求出*p,然后p+=1 ,关键是你要把p++看成一个表达式,而不是p在做自增操作,p++这个表达式的值就是当前的p,而不是自增后的p

 

同理*++p 就是*(++p) 把++p看作表达式,它的值就是p+=1,也就是说++p的值就是p自增1个单位后的值

运行下面这段:

#include<stdio.h>
int  main()
{
 char* a="bcd";
 char* p=a;
 printf("*p++=%c\n",*p++);
 p=a;
 printf("*(p++)=%c\n",*(p++));
 p=a;
 printf("*++p=%c\n",*++p);
 p=a;
 printf("*(++p)=%c\n",*(++p));
 p=a;
 printf("*(p+=1)=%c\n",*(p+=1));
 return 0;
}

 

 

++这东西和优先级是两回事,他就是个特殊的表达式, p++返回p当前的值,事后p+=1,  ++p返回p+=1 就这么简单,和什么优先级完全无关

Swjtu_YeJi
2013-10-11
知道答主
回答量:59
采纳率:0%
帮助的人:42.5万
展开全部
*++a = c;
*a++ = b;
*(a++) = c
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lovingyouyuan
2013-10-11 · 超过20用户采纳过TA的回答
知道答主
回答量:63
采纳率:0%
帮助的人:33.9万
展开全部
*++a与*(a++)的结果是一样的都为c,*a++结果是b
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式