首页 > 代码库 > C语言运算符优先级存在的问题

C语言运算符优先级存在的问题

C语言中的符号重载(C专家编程,2.3误做之过,P38)

 

优先级问题

表达式

人们可能误以为的结果

实际结果

.的优先级高于*

->操作符用于消除这个问题

*p.f

p所指对象的字段f

(*p).f

pf偏移,作为指针,然后进行解除引用操作

*(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