2012-01-20 16 views
6

Quando si crea una matrice di puntatori in c cosa fa l'effetto dell'aggiunta di parentesi?C pointer array

Ad esempio

int (*poi)[2];

vs

int *poi[2];

+0

Consente di risparmiare usura sulla tastiera –

risposta

8

puntatore a una matrice di 2 int s:

int (*poi)[2]; 

Un array di due int puntatori:

int *poi[2]; 

Normalmente Array ha precedenza maggiore rispetto al puntatore, ma se si aggiungono le parentesi poi il puntatore viene "prima".

+0

.. davvero? [] è vincolante più stretto Non vedo perché è questo – lynnyilu

+0

@LynnYiLu - Proprio come è definito lo standard C. – Hogan

+1

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

0

Le parentesi si legano più stretto di *, quindi il primo è un array di puntatori int, mentre il secondo è un puntatore a un array di int.

+1

Hai di nuovo quello che hai davanti, vero? –

+0

In un altro modo, penso. –

2

L'operatore di indice [] si lega più forte dell'operatore di derealizzazione *.

int *poi[2] 

si traduce in:

Se vedete poi, si applicano [x] ad esso, quindi dereference il risultato tramite * e si ottiene un int. Quindi è un array di 2 puntatori a int.

In

int (*poi)[2] 

i parantheses forzare il * da applicare prima. Quindi in qualsiasi momento viene utilizzato, se si applica * prima e quindi [x] si ottiene int. Quindi è un puntatore a un array di 2 int.