/ / Dynamiczne przydzielanie do tablicy wskaźników i jej alternatyw - c ++, tablice, wskaźniki, zarządzanie pamięcią, alokacja dynamiczna

Dynamiczne przydzielanie do tablicy wskaźników i jej alternatyw - c ++, tablice, wskaźniki, zarządzanie pamięcią, alokacja dynamiczna

Standardowy sposób przydzielania tablicy za pomocą nowego int to:

 int* arr = new int[50];

podczas deklarowania w ten sposób nastąpi alokacja pamięci ciągłej i będzie jedna zmienna tablicowa w stosie zmiennych.

jeśli chcę zadeklarować to w formie 50różne zmienne wskaźnikowe, dzięki którym każdy wskaźnik będzie miał inny adres pamięci i niekoniecznie sąsiadujące z najbardziej oczywistym sposobem, w jaki można to zrobić, wygląda następująco:

int * arr[50];

ale w ten sposób jakie byłoby polecenie / kod przypisywania pamięci (to znaczy poprzez nowe int) i jakie są wady lub zalety deklarowania w każdy sposób.

Odpowiedzi:

6 dla odpowiedzi № 1

Oczywistym sposobem byłoby powtórzenie wszystkich elementów i przydzielenie pamięci dla nich:

for (int i = 0; i < 50; i++){
arr[i] = new int;
}

Minusem nieciągłego fragmentu pamięci byłyby chybienia pamięci podręcznej. Możesz przeczytać więcej na ten temat tutaj.


3 dla odpowiedzi № 2

Jak przypisać, jest już wspomniano w ta odpowiedź; Dlatego nie powtarzam.
Dla singla int alokacja, twoja poniższa linia to przesada:

int* arr[50];  // all downsides only

Zamiast tego powinieneś używać prostych liczb całkowitych:

int arr[50];

Lepiej wykorzystywać urządzenia za pomocą standardowych pojemników, takich jak:

std::vector<int> vi;  // if the number of int-s are dynamic
std::array<int, 50> ai; // if the number of int-s are fixed

Wreszcie od ta odpowiedź,

"Unikaj wskaźników, dopóki nie możesz" ... Zasada jest taka, że ​​używasz wskaźników tylko wtedy, gdy nie ma innego wyboru. "