(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 * ]
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. –