微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

while(pointer!=NULL && pointer->next!=NULL) vs while(pointer->next!=NULL && pointer!=NULL) in C++

如何解决while(pointer!=NULL && pointer->next!=NULL) vs while(pointer->next!=NULL && pointer!=NULL) in C++

我试图检测链表中的循环。当我放置条件 while(pointer!=NULL && pointer->next!=NULL) 时,它运行良好,提供了所有理想的输出。但是当我反转条件时,它在不存在循环时停止显示输出。就像当一个循环存在时,它给出 true 作为输出,但当它不存在时,它不给出任何输出。所以,我想知道这背后的原因是什么。

解决方法

因为条件是从左到右计算的。在您的语句中,'pointer' 和 'pointer->next' 是您对照 'NULL' 检查的值。

但是,请注意从“指针”访问“next”要求指针本身不为空。尝试从空值访问属性会导致未定义的行为,这就是您程序中发生的情况

因此,在条件语句中,'pointer' 必须在 'pointer->next' 之前。并且,由于使用了“&&”运算符,如果首先对“指针”进行空检查,则条件会立即退出。

,

&& 运算符的好处是,只要条件给出第一个 false 值,就不会进一步检查条件。

#include <iostream>
#include <stdlib.h>
using namespace std;

int main() {
    struct ll{
        int value;
        struct ll* next;
    };
    struct ll* pointer;
    
    while(pointer != NULL && pointer->next != NULL){
        cout<< "pointer value:" << pointer <<endl;
    }

    return 0;
}

注意:在上面的程序中,我没有给指针变量分配空间。

while(pointer!=NULL && pointer->next!=NULL)

由于第一个条件返回 false,因此不检查条件的进一步部分。

#include <iostream>
#include <stdlib.h>
using namespace std;

int main() {
    struct ll{
        int value;
        struct ll* next;
    };
    struct ll* pointer;
    
    while(pointer->next != NULL && pointer != NULL){
        cout<< pointer->next << endl;
    }

    return 0;
}

注意:在上面的程序中,我没有给指针变量分配空间。

while(pointer->next != NULL && 指针 != NULL)

这里的第一个条件是无效的比较。所以程序转储到这里主要是导致分段错误。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。