aula 204

Como percorrer uma matriz dinâmica com aritmética de ponteiros?

Dando continuidade ao nosso Curso de Programação C, vamos aprender hoje como percorrer uma matriz dinâmica (array bidimensional) com aritmética de ponteiros.

Assim como fizemos com um vetor, também é possível percorrer uma matriz por meio de aritmética de ponteiros, dispensando assim a necessidade dos colchetes.

A diferença aqui é que agora temos duas dimensões, linhas e colunas. Então, primeiro precisamos fazer a aritmética de ponteiros para descobrir qual linha queremos acessar, assim:

    for(i = 0; i < 5; i++){
        for(j = 0; j < 5; j++)
            *(mat + i) ...
    }

Dessa forma obtermos o conteúdo dessa região de memória, que é o endereço inicial da linha que queremos acessar. Agora precisamos fazer outra aritmética de ponteiros para acessar uma determinada posição nesta linha, ou seja, somar o endereço encontrado na aritmética anterior com a variável j, que indica a coluna, assim:

    for(i = 0; i < 5; i++){
        for(j = 0; j < 5; j++)
            *(*(mat + i) + j) = rand() % 100;
    }

Código de exemplo completo em C de como percorrer uma matriz com aritmética de ponteiros

/*
            Aula 204: É possível percorrer uma matriz dinâmica sem colchetes?

            Código escrito por Wagner Gaspar
            Junho de 2021

        vetor de vetores -> int* -> 10 27 32
                            int* -> 11 75 49
                            int* -> 43 82 10
                            int* -> 12 47 62
*/

int main(){

    int **mat, i, j;

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

    for(i = 0; i < 5; i++)
        mat[i] = malloc(5 * sizeof(int));

    srand(time(NULL));

    for(i = 0; i < 5; i++){
        for(j = 0; j < 5; j++)
            *(*(mat + i) + j) = rand() % 100;
            //mat[i][j] = rand() % 100;
    }

    for(i = 0; i < 5; i++){
        for(j = 0; j < 5; j++)
            printf("%2d ", *(*(mat + i) + j));
            //printf("%d ", mat[i][j]);
        printf("\n");
    }

    return 0;
}

Deixe um comentário

quinze + 11 =

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.