aula 199

Como alocar um vetor dinâmico na linguagem C?

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;
}

Deixe um comentário

doze − 6 =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.