2010-06-24 3 views

Répondre

7

[] dépasse * par C precedence table ce qui signifie que vous disposez d'un tableau de cinq pointeurs int.

4

Peut-être est un doublon ... Il s'agit d'un tableau de cinq pointeurs à nombre entier; le programme cdecl cité dans une question similaire peut être utile pour les débutants:

cdecl> explain int *t[5]; 
declare t as array 5 of pointer to int 
+0

aussi: 'cdecl> expliquer int (* chose) [5] -> chose annoncez comme pointeur sur un tableau 5 int ' Cela donne le pointeur vers un tableau de 5 ints, il a demandé à propos de. –

6

En cas de doute utiliser des parenthèses - les programmeurs de maintenance vous remercier

0
(tout comme vous à 5h du matin quand vous trouvez enfin le bug!) en l'absence

tout de groupement explicite entre parenthèses, à la fois l'opérateur de tableau [] indice et opérateur d'appel de fonction () bind avant *, si

T *a[N];  -- a is an N-element array of pointer to T 
T (*a)[N];  -- a is a pointer to an N-element array of T 

T *f();   -- f is a function returning pointer to T 
T (*f)();  -- f is a pointer to a function returning T 

Cela découle de la grammaire (prendre . N de Harbison & Steele, 5e éd, annexe B):

 
declarator: 
    pointer-declarator 
    direct-declarator 

pointer-declarator: 
    pointer direct-declarator 

pointer: 
    * type-qualifier-listopt 
    * type-qualifier-listopt pointer 

direct-declarator: 
    simple-declarator 
    (declarator) 
    function-declarator 
    array-declarator 

function-declarator: 
    direct-declarator (parameter-type-list) 
    direct-declarator (identifier-listopt) 

array-declarator: 
    direct-declarator [ constant-expressionopt ] 
    direct-declarator [ array-qualifier-listopt array-size-expressionopt ]  
    direct-declarator [ array-qualifier-listopt * ] 
Questions connexes