【C語言弄搞優先順序】優先順序問題
阿新 • • 發佈:2018-12-14
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語言深度剖析》,侵權必刪。