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 № 1Oczywistym 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. "