优先级问题 | 表达式 | 人们可能误以为的结果 | 实际结果 |
---|---|---|---|
.的优先级高于* ->运算符用于消除这个问题 | *p.f | p所指向的字段f (*p).f | 对p取f偏移,作为指针,然后进行解除引用操作 *(p.f) |
[ ]高于* | int *ap[] | ap是一个指向int数组的指针 int (*ap)[] | ap是个元素为int指针的数组,int*(ap[]) |
函数高于* | int *func() | fp是个函数指针,返回值指向int,int(*fp)() | fp是个函数,返回int*,int *(fp()) |
==和!=高于位运算符 | (val & mask != 0) | (val & mask) != 0 | val &(mask !=0) |
==和!=高于赋值运算符 | c = getchar() != ECF | (c = getchar()) != ECF | c = (getchar() != ECF) |
算法运算符高于移位运算符 | msb << 4 + lsb | (msb << 4) + lsb | msb << (4 + lsb) |
逗号运算符优先级最低 | i = 1,2 | i = (1,2)这样的话i的结果是2而不是1 | (i = 1),2最终结果i的值是1而不是2 |
c语言运算符优先级存在的问题
最新推荐文章于 2021-07-15 15:20:49 发布