if(p ! = NULL && p->data == data)是否有问题

why0727 2013-03-10 02:17:05
if(p ! = NULL && p->data == data)
{
//do something
}

如果先计算p->data == data,那么当指针为空的时候,就会出现访问0地址,所以一直不敢这样用,请问我的担心是否是多余的?
...全文
348 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
IT_Stack 2013-03-10
  • 打赏
  • 举报
回复
编译器会从左边开始运算,&&语句的话第一个条件不成立 ,后面的就不会再去执行
wugui414 2013-03-10
  • 打赏
  • 举报
回复
不是多余的,你的担心是对的
ForestDB 2013-03-10
  • 打赏
  • 举报
回复
从左向右计算。
AnYidan 2013-03-10
  • 打赏
  • 举报
回复
&&, || 和 , 操作符是有执行顺序的
AndyZhang 2013-03-10
  • 打赏
  • 举报
回复
这些都是计算机优化过的,左||右 左为真则右就不必计算了,同一个道理
nadleeh 2013-03-10
  • 打赏
  • 举报
回复
引用 楼主 why0727 的回复:
if(p ! = NULL && p->data == data) { //do something } 如果先计算p->data == data,那么当指针为空的时候,就会出现访问0地址,所以一直不敢这样用,请问我的担心是否是多余的?
比对楼主的代码,楼主的担心是多余的。 && || 这些在c中是左到右顺序依次执行的(用汇编可以验证),中间只要任意一项不对就不执行剩下的了,当然全是||的话还是会执行完。
iamnobody 2013-03-10
  • 打赏
  • 举报
回复
看懂顶置的帖子你就懂了.
dingqiang107 2013-03-10
  • 打赏
  • 举报
回复
绝无问题,放心使用。&&之前表达式不成立时,&&之后的表达式根本不会执行。 但是重载的&&不在此列。重载的&&相当于普通函数,没有短路规则。
mujiok2003 2013-03-10
  • 打赏
  • 举报
回复
a && b, 可以保证先计算a,然后根据短路求值决定是否计算b
Athenacle_ 2013-03-10
  • 打赏
  • 举报
回复
引用 2 楼 why0727 的回复:
问题是A && B的计算顺序,如果是先计算B,那就是一个BUG
&&是个序列点,不存在你所考虑的问题。左边必定先计算
  • 打赏
  • 举报
回复
引用 2 楼 why0727 的回复:
问题是A && B的计算顺序,如果是先计算B,那就是一个BUG
&&是左至右结合的。。~ 给个分吧。。
  • 打赏
  • 举报
回复
就是这样用的
why0727 2013-03-10
  • 打赏
  • 举报
回复
问题是A && B的计算顺序,如果是先计算B,那就是一个BUG
  • 打赏
  • 举报
回复
是多余的 A&&B 只要A为假程序就不会去执行B部分了~

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧