c++ - 创建节点数组

标签 c++ arrays pointers nodes

当我们创建一个整数数组时,我们这样做:

int main() {
int x;
cout << "Enter size of array"
cin >> x;
int* myArray;
myArray = new int[x]
}

我们在数组旁边分配星号,我们将其分配为指针数组,对吧?

如果我创建一个节点数组,其中:

struct Node {
string Name;
int Age;
}

我运行了一些代码来对它进行试验并进一步了解它,我尝试像数组示例一样做,但创建一个带有节点的数组。

int main() {
Node* sumShit[5];
    Node* America = new Node();
    America->age = 16;
    America->Name = "America";
    sumShit[0] = America;
    Node* Japan = new Node();
    Japan->age = 15;
    Japan->Name = "Japan";
    sumShit[1] = Japan;

    cout << "[" << sumShit[1]->Name << ", " << sumShit[1]->age << "]";

}

使用指针打印出来的一切都很好,但后来我也没有使用指针,我只是将节点属性存储在节点中:

Node myNodeShit[5];
    Node Poop;
    Poop.age = 16;
    Poop.Name = "Poop";
    myNodeShit[0] = Poop;
    sortArrayName(myNodeShit, 5);
    printArray(myNodeShit, 5);

这也有效,但是使用指针并将其存储在节点中有什么好处。说到算法,排序和使用内存,有没有首选的方式。我试图弄清楚为什么将它作为指向节点的指针数组而不是节点数组会更好。

最佳答案

使用指针可以更灵活地更新/修改现有数据,因为数据仅在内存中声明一次。从这里,您可以使用指针从代码中的任何位置进行更改。

此外,使用指针可以节省内存,而创建实际节点将复制所述节点。当您将数组传递给函数时,这一点变得很明显。在这种情况下,节点数组(没有指针)成为推送到调用堆栈上的本地拷贝。当函数返回时,您将丢失对节点所做的任何修改。相反,使用指针将保存节点的状态。

如有疑问,请尽可能使用指针。

关于c++ - 创建节点数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26481723/

相关文章:

c++ - QGridLayout 没有按预期工作

c++通过参数将值传递给char数组

c# - 在 C# 中使用 PInvoke 的不透明指针

c++ - &符号 "&"在指针前面做什么?

c++ - 派生到基隐式指针类型转换

c++ - 初始化 FMOD 时出错

c++ - 直接使用成员函数与 unordered_set

java - Do While 循环跳过语句

c - C 数组中的动态内存分配

c++ - 为什么C++不能同时释放内存和指针