A maneira padrão de alocar array usando new int é:
int* arr = new int[50];
ao declarar desta maneira, haverá alocação de memória contígua e haverá uma única variável de matriz na pilha de variáveis.
se eu quiser declará-lo na forma de 50variáveis de ponteiro diferentes para que cada ponteiro tenha um endereço de memória diferente e não necessariamente contíguo a maneira mais óbvia de usá-lo é:
int * arr[50];
mas desta forma, qual seria o comando / código para atribuir memória (ou seja, via novo int) e quais são as desvantagens ou vantagens de declarar de cada maneira.
Respostas:
6 para resposta № 1O caminho óbvio seria iterar todos os elementos e alocar memória para eles:
for (int i = 0; i < 50; i++){
arr[i] = new int;
}
A desvantagem de um pedaço de memória não contíguo seria a falta de cache. Você pode ler mais sobre isso Aqui.
3 para resposta № 2
Como atribuir, já é mencionado em esta resposta; Daí não se repetir.
Para solteira int
alocação, sua linha abaixo é um exagero:
int* arr[50]; // all downsides only
Em vez disso, você deve usar números inteiros simples:
int arr[50];
Melhor utilizar instalações por contêineres padrão, como:
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
Finalmente, de esta resposta,
"Evite ponteiros até que você possa" ... Então, a regra básica é usar ponteiros apenas se não houver outra escolha. "