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

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

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

时间: 2024-09-30 09:56:10

C语言运算符优先级存在的问题的相关文章

C 语言运算符优先级

每当想找哪个运算符优先级高时,很多时候总是想找的就没有,真让人气愤!现在,终于有个我个人觉得非常全的,分享给大家,欢迎拍砖! C语言运算符优先级 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 -- () 圆括号 (表达式)/函数名(形参表) -- . 成员选择(对象) 对象.成员名 -- -> 成员选择(指针) 对象指针->成员名 -- 2 - 负号运算符 -表达式 右到左 单目运算符 ~ 按位取反运算符 ~表达式 ++ 自增运算符 +

C语言运算符优先级

C语言运算符优先级 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 -- () 圆括号 (表达式)/函数名(形参表) -- . 成员选择(对象) 对象.成员名 -- -> 成员选择(指针) 对象指针->成员名 -- 2 - 负号运算符 -表达式 右到左 单目运算符 ~ 按位取反运算符 ~表达式 ++ 自增运算符 ++变量名/变量名++ -- 自减运算符 --变量名/变量名-- * 取值运算符 *指针变量 & 取地址运算符 &

C语言运算符优先级列表(超级详细的---转载加自己习题)

转载于:http://www.jb51.net/article/37282.htm 每当想找哪个运算符优先级高时,很多时候总是想找的就没有,真让人气愤!现在,终于有个我个人觉得非常全的,分享给大家,欢迎拍砖! C语言运算符优先级 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 -- () 圆括号 (表达式)/函数名(形参表) -- . 成员选择(对象) 对象.成员名 -- -> 成员选择(指针) 对象指针->成员名 -- 2 - 负号运算

C语言运算符优先级及结合性

今天去翻了下C语言运算符的优先级和结合性,发现当初学习的时候就没认真记住,惭愧.发现一篇讲得不错的文章,编辑了下转来供以后翻阅. C语言运算符优先级表(由上至下,优先级依次递减) 运算符 结合性 () [] -> . 自左向右 ! ~ ++ -- - (type) * & sizeof 自右向左 * / % 自左向右 + - 自左向右 << >> 自左向右 < <= > >= 自左向右 == != 自左向右 & 自左向右 ^ 自左向右

C语言运算符优先级和结合性一览表

所谓优先级就是当一个表达式中有多个运算符时,先计算谁,后计算谁.这个其实我们在小学学算术的时候就学过,如1+4÷2. 但是C语言中的运算符已经远不止四则运算中的加减乘除了,还有其他很多运算符.当它们出现在同一个表达式中时先计算谁后计算谁呢?所以本节还是有必要讲一下的.最后我还会将所有运算符展示出来,然后告诉你哪个优先级高.哪个优先级低. 首先不需要专门记忆,也没有必要.因为作为初学者,哪个优先级高.哪个优先级低我们很难记住.就算死记硬背记住了,时间长不用也会忘记.所以当一个表达式中有多个运算符时

C 语言运算符优先级(记忆口诀)

优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右   () 圆括号 (表达式)/函数名(形參表)   . 成员选择(对象) 对象.成员名   -> 成员选择(指针) 对象指针->成员名   2 - 负号运算符 -表达式 右到左 单目运算符 (类型) 强制类型转换 (数据类型)表达式   ++ 自增运算符 ++变量名/变量名++ 单目运算符 -- 自减运算符 --变量名/变量名-- 单目运算符 * 取值运算符 *指针变量 单目运算符 &

C语言运算符优先级和口诀(转)

一共有十五个优先级: 1   ()  []  .  -> 2   !  ~   -(负号) ++  --   &(取变量地址)*   (type)(强制类型)    sizeof 3   * / % 4   + - 5   >> << 6   > >= < <= 7   == != 8   & 9   ^ 10  | 11  && 12  || 13  ?: 14   =  +=  -=  *=  /=   %=  |=

C语言运算符优先级和口诀 (转)

一共有十五个优先级: 1   ()  []  .  -> 2   !  ~   -(负号) ++  --   &(取变量地址)*   (type)(强制类型)    sizeof 3   * / % 4   + - 5   >> << 6   > >= < <= 7   == != 8   & 9   ^ 10  | 11  && 12  || 13  ?: 14   =  +=  -=  *=  /=   %=  |=

c语言运算符优先级,象狮虎豹记忆法

还记得小时候的斗兽棋吗,老鼠能吃大象,哈哈. -- 象狮虎豹.狗狼猫鼠. 我们把c语言的运算符15级的优先级分为8组,每一组拿出一个代表.如下: 为什么要这么做: 1. 人类适合记忆10以下的事物,15个优先级不好记忆. 2. 15个优先级当中,有些不会产生纠纷,比如 第1和2优先级,a[3]++,这是很自然的,它们可以合并,便于记忆.还有,你会写  a < b == c > d 这样的表达式吗?所以,关系运算符也可以合并.最常见的纠纷是 a & 7 == 3,这个时候,因为虎要吃豹,