Quando percorremos um vetor bidimensional utilizamos a seguinte construção:
vetor[linha][coluna]
Porém quando utilizamos ponteiros para acessar os elementos do vetor, a construção muda para:
*(*(vetor + linha) + coluna)
Veja o exemplo abaixo:
#include
#include
void main() {
int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int i;
for(i = 0; i < 3; ++i){
printf("%d ", *(a[i]+1) );
}
printf("\n");
for(i = 0; i < 3; ++i){
printf("%d ", *(*(a + i)+1) );
}
/*
int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
indices => 0,1,2,3,4,5,6,7,8, 9,10,11
L = linha, C = coluna, I = indice e V = valor
expressao L x C a[] I V
*(a[0]+1) => 0 * 4 = 0 + 1 = 1, logo = 2
*(a[1]+1) => 1 * 4 = 4 + 1 = 5, logo = 6
*(a[2]+1) => 2 * 4 = 8 + 1 = 9, logo = 10
*/
printf("\n");
}