为什么while循环会导致指针出现问题? 我是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) {} }

为什么while循环会导致指针出现问题? 我是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) {} },c++,while-loop,function-pointers,C++,While Loop,Function Pointers,总的来说,我试过: 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

总的来说,我试过:

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;
    }
}
int count=0;
测试*p;
test*p2=新测试();
做{

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

do{...}while(p == 0)
这意味着循环应一直执行,直到
p
0
不同,如果
p
等于
0
,循环将继续,如果不同,循环将退出循环

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

下一个循环将仅在p等于
0
时执行,明白我的意思吗


这里有一个

当然是在
cout++;
上的一个输入错误,而你的意思是
count++
对不起,这是我从虚拟机复制代码时犯的一个输入错误。请不要在这里发布你无法编译的代码,因为这样人们就会开始猜测事情。相反,你的问题要包含一个。作为新用户,也接受和读取。它按预期工作。从do while循环条件
p
为非零(或null ptr)这使得控件不会进入while循环。很难告诉您答案,因为我不知道您想要什么。基本上
0
nullptr
是相同的值。使用
nullptr
总是一个很好的做法,因为它不会混淆它是指针还是整数。我尝试过,即使我更改了值p在0中的e在do while循环之后,它不会进入while循环。您如何将p的值更改为零?向我们展示一些代码。这应该可以工作。但是您可以轻松地重写代码,而不必在条件中使用p。您已经有一个计数变量。我尝试使用nullptr,这是相同的。do while循环按照预期工作,而可能有很多变量:可能您没有编译新代码,而是运行旧代码(可能发生在visual studio中)或者其他很多事情。你迷路了,我们帮不了你…开玩笑..只是在做while循环之后和while循环之前调试reznicencu:p=nullptr;是的,但即使我将p的值重置为0或nullptr,它仍然不起作用。它对我有效,如果我将
p=0
放在
做while
之后,我将向你展示一个例子…t奇怪的是,它在while循环中打印了多少次消息?@Gello,
do-while
只执行一次,因为p不同于0,但这让你知道,我只是告诉你,如果你将p重置为0,它将进入第二个循环。ep未初始化,因此它可以在不同的编译器中假设不同的值,它是未定义的b埃哈维。