优先级问题 | 表达式 | 人们可能误以为的结果 | 实际结果 |
. 的优先级高于* ->用于消除这个问题 | *p.f | p所指向对象的字段f | 对p取f偏移,作为指针,然后进行解除引用操作。*(p.f) |
[]高于* | int *ap[] | ap是指向int数组的指针 int (*ap)[] | ap是个元素为int的指针的数组 int *(ap[]) |
函数()高于* | int *fp() | fp是个函数指针,所知函数返回int int (*fp)() | fp是个函数,返回int* int *(fp()) |
==和!=高于位操作符 | Val & mask != 0 | (val & mask) != 0 | val & (mask != 0) |
==和!=高于赋值符 | c = getchar() != EOF | (c = getchar()) != EOF | c = (getchar() != EOF) |
算术运算高于移位运算符 | msb<<4+lsb | (msb<<4)+lsb | msb<<(4+lsb) |
逗号运算符在所有运算符中优先级最低 | I = 1, 2; | I = (1, 2); | (I = 1), 2; |
转载自《C专家编程》