C++ 使用 foreach 使数组为空

jam*_*430 2 c++ arrays foreach null

Node* nodes[3];

for (Node* eachNode:nodes) {
    eachNode = 0; //if i try to dereference it gives seg fault
}                 // eg. *eachNode = 0;

if (nodes[0] == 0) {
    cout << "Null";
} else
    cout << "Not null";

cout << '\n';

Node* nodes2[3];

for (int i = 0; i < 3; ++i) { //this way works fine
    nodes2[i] = 0;
}

if (nodes2[0] == 0) {
    cout << "Null";
} else
    cout << "Not null";
Run Code Online (Sandbox Code Playgroud)

大家好,我正在尝试使数组中的所有对象都等于 null。当使用 for 循环时,它工作得很好,但是当我使用 foreach 循环时,它会中断。

我得到的输出是

不为空

无效的

我认为我必须取消引用 foreach 循环中的节点,但它会出现段错误。

有谁知道出了什么问题吗?谢谢。

Rul*_*lle 5

您编写的循环遍历数组的值:

for (Node* eachNode:nodes) {
    eachNode = 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的循环也可以使用以下方式编写auto

for (auto eachNode:nodes) {
    eachNode = 0;
}
Run Code Online (Sandbox Code Playgroud)

上述循环的问题在于,不是eachNode存储在数组中的指针,而是存储在循环的局部变量中的该指针的副本。

如果您希望将节点设置为空,则需要对要设置它的内存位置的引用。您可以通过使用以下命令引用数组元素来获取该引用auto&

for (auto& eachNode:nodes) {
    eachNode = 0;
}
Run Code Online (Sandbox Code Playgroud)

最后一段可能会做你想要的。