有没有办法在超过40之后停止下面的while循环的迭代? 我试图复制在null
指针未找到的情况下迭代的链表概念。
int main() {
int* arr = new int[4]{ 10,20,30,40 };
//for(int i=0; i<4; ++i) -- works fine
while (arr) {
cout << *(arr++) << endl;
}
return 0;
}
在超过40之后,是否要停止下面的while循环的迭代
有两种方法可以停止循环:使条件变为false,或者跳出循环(break,goto,return,throw等)。 你的循环也不行。
您的条件是arr
,只有当指针指向NULL时才为false。 您从不将null分配给arr
,因此它从不为null。
我试图复制链表的概念
链表概念通常不适用于非链表的事物。 数组不是链表。
因为arr
放在一个连续的内存中,所以您永远不会在arr
之后得到内存地址的空值。
您可以尝试在联机编译器上执行以下代码。
#include <iostream>
int main()
{
int* arr = new int[4]{ 10,20,30,40 };
for(int i=0; i<4; ++i){
std::cout << *(arr++) << std::endl;
std::cout << arr << std::endl;
}
std::cout << "NULL is " << (int*)NULL; // NULL mostly stands for 0.
return 0;
}
输出可能如下所示:
10
0x182de74
20
0x182de78
30
0x182de7c
40
0x182de80
NULL is 0
linkedlist为什么有效? 因为linkedlist将数据存储在非连续内存中,而next()
会给出null
作为列表结束的标志。
此外,您可能需要一本C++基础书籍。
这是书单。
使用一个保留值(如零)并将其追加到数组的末尾,就像使用旧的C字符串一样。 这被称为哨兵元素。
int* arr = new int[4]{ 10,20,30,40,0 };
while (arr) {
...