一段代码
int main(int argc, const char * argv[]) {
char s[100];
gets(s);
char *t = s;
printf("%c %c\n",*t+1,*(t+1));
return 0;
}
输入&输出
aa
b a
在这之前我一直有个错误认识,那就是「+」运算符的优先级是高于「*」取值运算符的,
然而一道程序设计题目debug的过程中我才发现「+」运算符的优先级其实是低于「*」运算符的
如上文输出
*t+1 的执行也就是:先求值 *t 然后再求值 *t + 1
而 *(t+1) 也就是:先求值 t + 1 然后在求值 *(t+1)
还有关于「*p++」的问题
一段程序:
int main(int argc, const char * argv[]) {
char s[100];
gets(s);
char *t = s;
printf("%p %c %p %c\n",t,*t++,t,*t);
return 0;
}
输入&输出
abc
0x7ffeefbff5d0 a 0x7ffeefbff5d1 b
「++」运算符的优先级与「*」取值运算符的优先级相等
因此会先执行「*」取值运算然后再对指针t执行「++」运算