Почему в то время как цикл вызывает проблемы с указателями? - PullRequest
0 голосов
/ 26 января 2020

Я новичок в 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 работает, он печатает сообщение так, как я хочу.

В цикле while это не так, он даже не удосужился войти. Я пытаюсь изменить условие (с равного на не равное) «по какой-то причине», и терминал начал печатать сообщение в l oop.

Я даже пытаюсь изменить в условии «0 'с' nullptr ', но результат одинаков для обоих циклов. Я пытаюсь напечатать местоположение второго указателя, p2, и это в памяти. Где я делаю не так?

Ответы [ 2 ]

0 голосов
/ 26 января 2020

Если у вас есть

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

, это означает, что цикл должен выполняться до тех пор, пока p не будет отличаться от 0, если p равно 0 l oop продолжится, если он отличается , он выйдет из l oop.

Так что, если он закончится, p будет отличаться от 0.

Следующее l oop будет выполнено, только если p равно равно 0, понимаете, что я имею в виду?

Вот рабочий образец

0 голосов
/ 26 января 2020

Код выглядит странно, но это проблема: вы изменяете значение p в первый раз. Это l oop существует, потому что p больше не равно 0. Тогда как он может войти во второй l oop, который имеет такое же условие? Вы должны сбросить значение p.

...