C · Avançado · Português · Técnico
ponteiro para array
Ponteiro cujo alvo é um array inteiro, declarado como int (*p)[3]. A aritmética nele avança o tamanho do array todo, ao contrário do array de ponteiros int *p[3].
Onde usar
Surge ao passar matrizes para funções, como int (*m)[N], e ao ler declarações complexas. Em review, a confusão entre int *p[3] e int (*p)[3] é fonte comum de erro.
Em código
#include <stdio.h>
int main(void) {
int m[2][3] = {{1, 2, 3}, {4, 5, 6}};
int (*p)[3] = m; // aponta para a linha 0
p++; // pula 3 ints
printf("%d\n", (*p)[0]); // 4
}Exemplos
Declara um ponteiro para array de três ints para percorrer a matriz por linhas.
Sem os parênteses vira um array de ponteiros, não um ponteiro para array.
Cuidado
Trocar o lugar dos parênteses: int *p[3] é um array de três ponteiros para int, não um ponteiro para array.
Sinônimos
pointer to array
Antônimos
array de ponteiros