Qual é a diferença? Ponteiro para uma matriz vs matriz regular
Estou familiarizado com Java e tentando me ensinar C / C ++. Estou roubando um currículo de uma classe que hospeda seus materiaisAqu. Infelizmente, não posso perguntar ao professor, pois não estou na sala de aula. Minha preocupação é com a seção "matrizes declaradas dinamicamente":
Se você quiser alterar o tamanho da sua matriz em tempo de execução, declare matrizes dinâmicas. Isso é feito com ponteiros e com o novo operador. Para o básico sobre ponteiros, leia a seção de ponteiro
Aloque memória usando new e, em seguida, você acessa a matriz da mesma maneira que faria com uma matriz estática. Por exemplo
int * arrayPtr = novo int [10]; for (int i = 0; i <10; i ++) {arrayPtr [i] = i; }
A imagem da memória é idêntica à matriz estática, mas você pode alterar o tamanho, se necessário. Não esqueça que você deve desalocar a memória antes de alocar nova memória (ou você terá um vazamento de memória
delete [] arrayPtr; // o [] é necessário ao excluir ponteiros de array arrayPtr = new int [50]; . . .
Quando terminar completamente a matriz, você deve excluir sua memória:
delete [] arrayPtr;
s matrizes multidimensionais @Dynamic são feitas de maneira semelhante ao Java. Você terá ponteiros para ponteiros. Para um exemplo, consulte um
Meu entendimento é que uma matriz em C é simplesmente uma referência ao endereço de memória do primeiro elemento da matri
Então, qual é a diferença entreint *pointerArray = new int[10];
eint array[10];
caso existam
Fiz alguns testes que parecem indicar que eles fazem exatamente a mesma coisa. O site está errado ou li errado?
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
// Initialize the pointer array
int *pointerArray = new int[10];
for (int i = 0; i < 10; i++){
pointerArray[i] = i;
}
// Initialize the regular array
int array[10];
for (int i = 0; i < 10; i++){
array[i]= i;
}
cout << *(pointerArray + 5) << endl;
cout << *(array + 5) << endl;
cout << pointerArray[5] << endl;
cout << array[5] << endl;
cout << pointerArray << endl;
cout << array << endl;
return 0;
}
Saída
5
5
5
5
0x8f94030
0xbfa6a37c
Tentei "redimensionar dinamicamente" minha matriz de ponteiros, conforme descrito no site, mas minha nova (maior) matriz de ponteiros acaba preenchida com zeros, o que não é muito úti