C++中a是一个char指针 如果char*a="bcd" *++a与*a++以及*(a++)结果会有什么不同呢?
3个回答
展开全部
*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'了。
开始学习时很容易把自增运算符和优先级概念混淆,前面两位就是
同样的道理*++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 就这么简单,和什么优先级完全无关
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询