Declarações de Variáveis Ponteiro
A forma de declarar que uma variável foo
aponta para o tipo t
é:
t *foo;
Para lembrar essa sintaxe, pense: “se você desreferenciar foo
, usando o operador ‘*’, o que você obtém é do tipo t
. Logo, foo
aponta para o tipo t
.”
Assim, podemos declarar variáveis que armazenam ponteiros para esses três tipos, da seguinte maneira:
int *ptri; /* Ponteiro para int. */
double *ptrd; /* Ponteiro para double. */
double (*ptrda)[5]; /* Ponteiro para double[5]. */
A declaração int *ptri;
significa: “se você desreferenciar ptri
, obtém um int
.” Já double (*ptrda)[5];
significa: “se você desreferenciar ptrda
, e então indexar por um inteiro menor que 5, você obtém um double
.” Os parênteses expressam o fato de que você deve desreferenciar primeiro, depois indexar.
Compare isso com a seguinte declaração:
double *aptrd[5]; /* Array de cinco ponteiros para double. */
Como o operador ‘*’ tem precedência sintática menor que a indexação, double *aptrd[5]
significa: “se você indexar aptrd
por um inteiro menor que 5, e então desreferenciar, obtém um double
.” Portanto, *aptrd[5]
declara um array de ponteiros, não um ponteiro para array.
Atualizado
Isto foi útil?