Когда мы создаем массив целых чисел, мы делаем это так:Создание массива узлов
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);
И это тоже работали, однако WHATS преимущества в использовании указатели и просто хранить его в узле. Когда дело доходит до алгоритмов, сортировки и использования памяти, есть ли предпочтительный способ. Я пытаюсь понять, почему было бы лучше иметь его как массив указателей на узлы и массив узлов.
Что касается того, почему использование указателей может быть лучше, чем массивы, подумайте о том, объявляете ли вы массив внутри функции и возвращаете указатель на этот массив, то это может привести к [* неопределенному поведению *] (http: // en .wikipedia.org/wiki/Undefined_behavior), когда массив выходит из области действия, когда функция возвращается, и указатель больше не действителен. Если вы выделили память с помощью 'new' внутри функции, а затем вернули этот указатель, то это будет нормально, так как память будет по-прежнему выделяться при возврате функции. –
Обратите внимание на свой язык. – molbdnilo
Любая причина, по которой вы не используете контейнеры STL? – DumbCoder