当我们创建一个整数数组时,我们这样做:
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);
这也有效,但是使用指针并将其存储在节点中的优势是什么。当谈到算法,排序和使用内存时,是否有一种首选方式。我试图弄清楚为什么将它作为节点与节点数组的指针数组更好。
答案 0 :(得分:1)
使用指针可以更灵活地更新/修改现有数据,因为数据只在内存中声明一次。从这里,您可以使用指针从代码中的任何位置进行更改。
此外,使用指针可节省内存,而创建实际节点将创建所述节点的副本。当您将数组传递给函数时,这一点就变得很明显了。在这种情况下,节点数组(没有指针)成为推送到调用堆栈的本地副本。当函数返回时,您将丢失对节点所做的任何修改。相反,使用指针将保存节点的状态。
如有疑问,请尝试尽可能使用指针。