Você está visualizando atualmente Como Criar Uma Matriz Dinâmica?

Como Criar Uma Matriz Dinâmica?

Uma matriz, ou array bidimensional, é uma estrutura de dados semelhante aos vetores, porém contendo duas dimensões, linhas e colunas. Dizendo em outras palavras, uma matriz é um conjunto de elementos em que, para acessar cada um dos elementos é preciso informar duas coordenadas, os índices da linha e da coluna, da posição que se deseja acessar, como apresentado na figura a seguir.

Representação de uma matriz 4 x 4

O processo para criar uma matriz dinâmica com a linguagem de programação C não é muito complicado, contudo exige algum conhecimento de ponteiros, uma vez que uma matriz dinâmica nada mais é que um vetor de vetores, como apresentado na figura a seguir.

Uma matriz dinâmica 3 x 4 representada como um vetor de vetores

Explicando. Para criar um vetor com capacidade para 10 inteiros com alocação dinâmica de memória escrevemos a seguinte linha:

int *meuVetor = malloc(sizeof(int) * 10);

ou seja, alocamos memória para 10 inteiros e o endereço inicial desta região de memória é retornado e salvo na variável meuVetor, que é um ponteiro.

Para criar uma matriz dinâmica 5 por 7 por exemplo, devemos primeiro criar um vetor de ponteiros. Isso pode ser feito com a linha a seguir (observe que há um detalhe no operador sizeof que faz toda a diferença):

int **minhaMatriz = malloc(sizeof(int*) * 5);

Assim, alocamos memória para 5 PONTEIROS para inteiros. O endereço inicial desta região de memória é salvo na variável minhaMatriz. Esta variável possui dois * por dois motivos:

1º – Guarda um endereço de memória;

2º – A região de memória apontada por esse endereço também irá guardar um endereço de memória.

Feito isso. É necessário agora alocar um vetor de tamanho 7 para cada posição da variável minhaMatriz, como feito a seguir:

minhaMatriz[i] = malloc(sizeof(int) * 7);

Dessa forma, temos um vetor de tamanho 5 que, cada posição guarda o endereço de outro vetor de tamanho 7, ou seja, uma matriz com 5 linhas e 7 colunas.

No vídeo a seguir apresento uma videoaula construindo uma matriz dinâmica. O código completo escrito encontra-se a seguir.

Matriz dinâmica com a linguagem de programação C

#include <stdio.h>
#include <stdlib.h>

// recebe uma matriz nos molde tradicionais, informando dimenções de linha e coluna
void imprimir(int mat[3][3]){
    int linha, coluna;

    printf("Imprimindo a matriz:\n");
    for(linha = 0; linha < 3; linha++){
        for(coluna = 0; coluna < 3; coluna++)
            printf("%d ", mat[linha][coluna]);
        printf("\n");
    }
}

// recebe o ponteiro para uma matriz
void imprimir2(int **mat){
    int linha, coluna;

    printf("Imprimindo a matriz:\n");
    for(linha = 0; linha < 3; linha++){
        for(coluna = 0; coluna < 3; coluna++)
            printf("%d ", *(*(mat + linha) + coluna));// imprime a matriz por meio de aritmética de ponteiros
            //printf("%d ", mat[linha][coluna]);// imprime a matriz usando os colchetes
        printf("\n");
    }
}

int main() {
    int i, linha, coluna, mat[3][3];
    int **mat2;

    // aloca um vetor para guardar 3 ponteiros para inteiros
    mat2 = malloc(3 * sizeof(int*));

    for(i = 0; i < 3; i++)
        mat2[i] = malloc(3 * sizeof(int));// aloca um vetor de inteiros de tamanho 3

    for(linha = 0; linha < 3; linha++){
        for(coluna = 0; coluna < 3; coluna++){
            printf("Digite o elemento %d %d: ", linha, coluna);
            //scanf("%d", &mat[linha][coluna]);
            //scanf("%d", &mat2[linha][coluna]);
            scanf("%d", *(mat2 + linha) + coluna);// aritmética de ponteiros
        }
    }
    //imprimir(mat);
    imprimir2(mat2);

    return 0;
}

Ficou com alguma dúvida? Use a seção abaixo de comentários. Será um prazer ajudar. Se gostou do conteúdo, nos ajude compartilhando com seus amigos. Abraços e até o próximo.

Deixe um comentário

20 − treze =

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.