为什么循环导致指针出现问题?

问题描述 投票:-2回答:2

我是C ++的新手,我最近开始研究指针,我试图制作一个简单的测试程序:

struct test {
    int a;
    double b;
    test *next;

    test() : a(0), b(0), next(nullptr) {}

    test(int v1, double v2) : a(v1), b(v2), next(nullptr) {}

    test(int v1, double v2, test *n) : a(v1), b(v2), next(n) {}
}

比主要我尝试过:

int count = 0;
test *p;
test *p2 = new test();

do {
    cout << "Hello" << endl;
    cout++;
    if (count>5) {
        p = p2;
    }
}while(p==0);

while (p==0) {
    cout << "Hello" << endl;
    count++;
    if (count>5) {
        p = p2;
    }
}

do-while周期起作用,它根据需要打印消息。

在一段时间内,它甚至没有进入。我出于某种原因尝试更改条件(从相等到不相等),并且终端开始循环打印消息。

我什至尝试将'0'更改为'nullptr',但两个周期的结果相同。我尝试打印第二个指针p2的位置,它在内存中。我在哪里做错了?

c++ while-loop function-pointers
2个回答
0
投票

代码看起来很奇怪,但这是问题所在:您在第一次执行时更改p的值。因为p不再为0,所以存在该循环。那么它如何进入条件相同的第二个循环?您必须重置p的值。


0
投票

有的时候

do{...}while(p == 0)

这意味着循环应该执行到p0相差[[different,如果p等于0,则循环将继续,如果different,则退出循环循环。

因此,如果结束,p将不同于0。

仅当p与0等于[[等于]时,才会执行下一个循环,明白我的意思吗?

这里是working sample

© www.soinside.com 2019 - 2024. All rights reserved.