2010-06-24 8 views

Respuesta

7

[] triunfos * por el C precedence table lo que significa que tiene una matriz de cinco punteros int.

4

Quizás es un duplicado ... Es una matriz de cinco punteros a entero; el programa cdecl citado en una pregunta similar puede ser útil para los recién iniciados:

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

También: 'cdecl> explicar int (* cosa) [5] - cosa> declare como puntero a la matriz 5 de int ' Esto le da al puntero a una matriz de 5 ints acerca de los cuales preguntó. –

6

En caso de duda utilización paréntesis - los programadores de mantenimiento se lo agradecerán

0
(al igual que usted a las 5 am cuando finalmente encontrar el error!)

Ausente cualquier agrupación explícita con paréntesis, tanto el operador de subíndice de matriz [] y llamada de función operador () se unen antes de *, de modo

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 

Esto se sigue de la gramática (tomar . N de Harbison & Steele, quinta ed, apéndice 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 * ] 
Cuestiones relacionadas