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