我是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的位置,它在内存中。我在哪里做错了?
代码看起来很奇怪,但这是问题所在:您在第一次执行时更改p
的值。因为p不再为0,所以存在该循环。那么它如何进入条件相同的第二个循环?您必须重置p的值。
有的时候
do{...}while(p == 0)
这意味着循环应该执行到p
与0
相差[[different,如果p
等于0
,则循环将继续,如果different,则退出循环循环。
p
将不同于0。仅当p与0
等于[[等于]时,才会执行下一个循环,明白我的意思吗?