C运算符优先级的错误

本文探讨了C语言中运算符优先级导致的常见误解,包括"."与"*","[]"与"*","()"与"*",位操作符与"=="和"!="的关系,赋值符与比较操作的关系,算术运算与移位运算的优先级,以及逗号运算符的特殊地位。强调在混合运算时使用括号明确表达式意图的重要性,并指出赋值运算符的右结合性。
摘要由CSDN通过智能技术生成

1. 优先级运算符的使用
    我相信玩过C的人都曾有过这样的或那样的不可思议经历,会非常感慨C的博大精深、深不可测,很多时候你根本不知道一条语句的真实执行情况(除非经过具体环境的编译和执行得出结论,可能你事后还是很迷茫),其实,有些已成事实特性并不是原本设计C语言时想要看到的,因为有些运算符的优先级是错误的,如果你不相信,下面就来看一下这样例子:
    i = 1, 2;
    你觉得i的结果会是多少?我们知道逗号的运算符的值就是最右边操作数的值。但在这里赋值符的优先级更高,所以实际情况应该是:
    (i = 1), 2;  /* i的值为1 */
    i负值为1,然后执行常量2的运算,计算结果丢弃。最终i的结果是1而不是2。

2.常见的最容易犯错的优先级运算符
  1)"."的优先级高于"*"
    举例:*p.f
    可能误以为的结果:p所指对象的字段f,(*p).f
    实际结果:对p取f偏移,作为指针,然后进行解除引用的操作 *(p.f)
  2) "[]"的优先级高于"*"
    举例:int *ap[]
    可能误以为的结果:ap是一个指向int数组的指针 int(*ap)[]
    实际结果:ap是一个元素为int指针的数组 int *(ap[])
  3) 函数"()"的优先级高于"*"
    举例:int *fp()
    可能误以为的结果:fp是一个函数指针,所指函数返回int,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值