摘抄于C专家编程2.3.2,有兴趣可以阅读书籍。
1,C里边下述的运算符常用,且优先级易搞错,摘抄出来做个笔记
优先级问题 | 表达式 | 误解读 | 实际结果 |
---|---|---|---|
. 高于 * | *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()) != EOF | c = (getchar() != EOF) |
算数运算符 高于 位运算符 | msb << 4 + lsb | (msb << 4) + lsb | msb << (4 + lsb) |
逗号运算符优先级最低 | i = 1 , 2 | i = (1 , 2) | (i = 1) , 2 |
2,另外
- C中的优先级很多总结,比如https://blog.youkuaiyun.com/polarisyj86/article/details/82226796
- 有个与结合性相似的知识点,C陷阱与缺陷2.1理解函数声明里边所提,请解释(* (void(*)())0)();