1. 程式人生 > >【C語言弄搞優先順序】優先順序問題

【C語言弄搞優先順序】優先順序問題

C語言易弄錯優先順序 1.".“的優先順序高於”*","->"操作符用於消除這類問題

*p.f

誤認:p所指物件的欄位f。(*p).f 實際結果:對p取f偏移,作為指標,然後作為解除引用操作。*(p.f)*

2.[]優先順序高於*

int *ap[]

誤認:ap是個指向int陣列的指標。 int (*ap)[] 實際結果:ap是個元素為int的指標陣列。 int *(ap[])

3.函式()高於*

int *fp()

誤認:fp是個函式指標,所指函式返回int。int (*fp)() 實際結果:fp是一個函式,返回值為int *。 int *(fp())

4.==和!=高於位運算

(val & mask != 0 ) 

誤認:(val & mask) != 0 實際結果: val & (mask != 0)

5.==和!=高於賦值運算

c = getchar() != EOF

誤認:(c = getchar()) != EOF 實際結果:c = (getchar() != EOF)

6.算術運算高於位運算

msb << 4 + lsb

誤認:(msb << 4) + lsb 實際結果:msb << (4 + lsb)

7.","運算子在所有運算子中最低

[[email protected] keyword_study]$ cat priority.c
#include <stdio.h>

int main(void)
{
    int i;
    i=1,2;
    printf("%d\n",i);

    return 0;
}

[
[email protected]
keyword_study]$ gcc priority.c [[email protected] keyword_study]$ ./a.out 1 [[email protected] keyword_study]$

注:本篇文章學習來自《c語言深度剖析》,侵權必刪。