1. 程式人生 > >運算子優先順序的比較

運算子優先順序的比較

一段程式碼

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執行「++」運算