運算子優先順序的比較
阿新 • • 發佈:2019-02-04
一段程式碼
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執行「++」運算