C语言中的符号重载(C专家编程,2.3误做之过,P38)
优先级问题 |
表达式 |
人们可能误以为的结果 |
实际结果 |
.的优先级高于* ->操作符用于消除这个问题 |
*p.f |
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())!=0 |
c=(getchar()!=EOF) |
算术运算高于移位运算符 |
msb<<4+lsb |
(msb<<4)+lsb |
msb<<(4+lsb) |
逗号运算符在所有运算符中优先级最低 |
i=1,2 |
i=(1,2) |
(i=1),2 |