【发布时间】:2017-04-26 16:14:30
【问题描述】:
而 (ptr!=NULL && dptr!=NULL && dptr->next!=NULL)
在这段代码中,如果指针 dptr 为 NULL,它将工作还是终止?
【问题讨论】:
-
什么语言?请使用适当的标签。
-
它怎么会终止?你没有调用任何终止函数。
标签: pointers operator-precedence
而 (ptr!=NULL && dptr!=NULL && dptr->next!=NULL)
在这段代码中,如果指针 dptr 为 NULL,它将工作还是终止?
【问题讨论】:
标签: pointers operator-precedence
这句话的真假实际上不仅基于 dptr,还基于 ptr 和 dptr->next。如果语句为真 - 将执行 while 循环的内容。
子语句(你的camparisons to not NULL)一个接一个地被检查——如果一个是假的,另一个不会被执行。对于大多数编程语言来说都是如此。虽然我还没有检查过所有人。 逻辑 && 以及 ||有一些内在的快速回报机制。他们都从左到右一步一步地进行子语句。 (加号 () )。使用 &&,检查在第一个错误语句时中止。与 ||检查在第一个正确的语句时中止。不会到达其他检查。
所以你的语句永远不会检查 dptr->next != NULL 是否 dptr 实际上是 NULL。因此,您的语句可以安全地访问 NULL 指针。
【讨论】: