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