Nesta aula, praticando o que estudamos sobre alocação dinâmica de memória, vamos aprender como alocar um vetor dinâmico na linguagem C.
É muito comum a pergunta: “professor como eu peço para o usuário informar o tamanho do vetor?”
A forma mais segura de fazer isso é com alocação dinâmica de memória. Imagine que ao perguntar ao usuário qual o tamanho do vetor, ele digitou 25. Ele deseja criar um vetor de tamanho 25.
Para alocar um vetor dinamicamente de tamanho 25 basta utilizarmos a função malloc que já conhecemos. Esta função recebe a quantidade de bytes que desejamos alocar. Assim, basta multiplicarmos 25 (o tamanho digitado pelo usuário) com a quantidade de memória de um elemento do tipo do vetor. Se for um vetor de tamanho 25 para números inteiros, então temos o seguinte:
// o ponteiro vet recebe o endereço inicial da região de memória alocada int tam = 25; vet = malloc(tam * sizeof(int)); // tam * sizeof(int) gera a quantidade de memória necessária para 25 inteiros
Agora que nosso vetor foi alocado, podemos percorrê-lo tanto para preencher o vetor quanto para imprimir seu conteúdo, como feito a seguir por meio de aritmética de ponteiros:
if(vet){ printf("Memoria alocada com sucesso!\n"); for(i = 0; i < tam; i++) *(vet + i) = rand() % 100; // sorteia números entre 0 e 100 for(i = 0; i < tam; i++) printf("%d ", *(vet + i)); // imprime o conteúdo desta região de memória printf("\n"); }
Código de exemplo completo em C para alocação dinâmica de um vetor
/* Aula 199: Como alocar um vetor dinâmico? Código escrito por Wagner Gaspar Junho de 2021 */ int main(){ int i, tam, *vet; printf("Digite o tamanho do vetor: "); scanf("%d", &tam); srand(time(NULL)); vet = malloc(tam * sizeof(int)); if(vet){ printf("Memoria alocada com sucesso!\n"); for(i = 0; i < tam; i++) *(vet + i) = rand() % 100; for(i = 0; i < tam; i++) printf("%d ", *(vet + i)); printf("\n"); } else{ printf("Erro ao alocar memoria!\n"); } return 0; }