有时候总是会用到*str++或者*str+=1,但是总是会容易把它们用错,所以就得亲自验证验证,它们两的区别以及*(str++)与*str++以及*(str+=1)的区别。
首先查询优先级表可知,++和*取值符属于同一优先级,+=在它们之后
所以明显可以得知*str+=1与它们的不同,*str+=1,由于*取值运算符优先级高于+=,所以会先执行取值运算,得到一个字符后再加1,而一个字符加1就是ASCII表中的下一位。
程序如下所示:
运行结果如下
h的下一位就是i。
1.*str+=1与*(str+=1)的区别由于用()将str+=1括了起来,那么就要先执行()内的内容,那*(str+=1)结果应该就是,*str的下一个字符,看看程序:
运行结果:
确实如此,验证成功。
2.*(str+=1)和*(str++)的区别看似两个应该是一样的效果,因为都有括号将后半部分括起来,那就来验证一下吧。程序如下:
#includeint main () { char a[10]="hello"; char b[10]="hello"; char *p=a; char *h=b; printf("*a=%cn",*p); printf("*(a++)=%cn",*(p++)); printf("*a=%cn",*p); printf("*b=%cn",*h); printf("*(b+=1)=%cn",*(h+=1)); printf("*b=%cn",*h); return 0; }
运行结果:
与猜测不一样,验证错误,由于*取值运算符与++处于同一运算符,不管有没有括号将str++括起来都会先运行*str,再++,所以*(str++)还是等于*str。
3.*str++和*(str++)的区别由上面的验证可知,*str++和*(str++)没有区别,不论是否有括号,都会先运行*取值运算符,再运行++,这里需要注意,以免把*(str++)等同于*(str+=1)来使用。验证程序如下:
#includeint main () { char a[10]="hello"; char b[10]="hello"; char *p=a; char *h=b; printf("*a=%cn",*p); printf("*a++=%cn",*p++); printf("*a=%cn",*p); printf("*b=%cn",*h); printf("*(b++)=%cn",*(h++)); printf("*b=%cn",*h); return 0; }
验证成功,两者没有区别。



