为什么 while 循环会导致指针出现问题?
Why while cycle causes problem with pointers?
我是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循环中它没有,它甚至懒得输入。我尝试更改条件(从等于到不等于)"for some reason" 并且终端开始循环打印消息。
我什至尝试在条件下用 'nullptr' 更改“0”,但两个循环的结果相同。我尝试打印第二个指针 p2 的位置,它在内存中。我哪里做错了?
代码看起来很奇怪,但这就是问题所在:您在第一个 do while 中更改了 p
的值。这个循环存在是因为p已经不为0了,那怎么进入第二个条件相同的循环呢?您必须重置 p.
的值
当你有
do{...}while(p == 0)
这意味着循环应该执行直到 p
与 0
不同 ,如果 p
等于 0
循环将继续,如果 不同 它将退出循环。
所以如果它结束了,p
将不同于0。
只有当 p 等于 到 0
时才会执行下一个循环,明白我的意思吗?
这是一个working sample
我是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循环中它没有,它甚至懒得输入。我尝试更改条件(从等于到不等于)"for some reason" 并且终端开始循环打印消息。
我什至尝试在条件下用 'nullptr' 更改“0”,但两个循环的结果相同。我尝试打印第二个指针 p2 的位置,它在内存中。我哪里做错了?
代码看起来很奇怪,但这就是问题所在:您在第一个 do while 中更改了 p
的值。这个循环存在是因为p已经不为0了,那怎么进入第二个条件相同的循环呢?您必须重置 p.
当你有
do{...}while(p == 0)
这意味着循环应该执行直到 p
与 0
不同 ,如果 p
等于 0
循环将继续,如果 不同 它将退出循环。
所以如果它结束了,p
将不同于0。
只有当 p 等于 到 0
时才会执行下一个循环,明白我的意思吗?
这是一个working sample