2012-01-20 27 views
6

Al crear una matriz de punteros en c, ¿qué efecto tiene agregar paréntesis?matriz de punteros C

Por ejemplo

int (*poi)[2];

vs

int *poi[2];

+0

Guarda el desgaste en el teclado –

Respuesta

8

puntero a una matriz de 2 int s:

int (*poi)[2]; 

Una matriz de dos int punteros:

int *poi[2]; 

Normalmente matriz tiene mayor precedencia que el puntero, pero si se agrega entre paréntesis a continuación, el puntero viene "primero".

+0

.. really? [] se está vinculando más estrictamente No veo por qué es esto – lynnyilu

+0

@LynnYiLu - Así es como se define el estándar C. – Hogan

+1

http://binglongx.wordpress.com/2009/01/25/how-to-read-a-cc-declaration/ – Hogan

0

Los corchetes se unen más apretados que *, por lo que el primero es una matriz de punteros int, mientras que el segundo es un puntero a una matriz de ints.

+1

Tienes eso de vuelta al frente, ¿no? –

+0

Otra manera, creo. –

2

El operador de índice [] se une más fuerte que el operador de desvinculación *.

int *poi[2] 

se traduce en:

Si ve poi, aplicar [x] a ella, a continuación, eliminar la referencia al resultado a través de * y se obtiene una int. Así que es una matriz de 2 punteros a int.

En

int (*poi)[2] 

los parantheses forzar la * que deben aplicarse primero. Así que en cualquier momento poi se utiliza, si aplica * primero, y luego [x] obtiene un int. Así que es un puntero a una matriz de 2 int.