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