2012-01-08 12 views

risposta

1

Riceverai una diagnostica.

int [x][] è un tipo di array incompleto che non può essere completato.

3

Otterrai un errore di compilazione. Per gli array multidimensionali, al massimo la prima dimensione può essere omessa. Ad esempio, int array[][x] sarebbe invece valido.

+1

Per maggiori dettagli sul parsing typedef: http://publications.gbdirect.co.uk/c_book/chapter8/typedef.html –

8

Supponiamo di avere un posto:

#define x 3 

Come altri sottolineano, typedef int array [3][]; non verrà compilato. È possibile omettere solo l'elemento più significativo (ovvero il primo) di una lunghezza dell'array.

Ma si può fare:

typedef int array [][3]; 

Ciò significa che array è un array int (di lunghezza non ancora specificato) di lunghezza 3 matrici.

Per utilizzarlo, è necessario specificare la lunghezza. È possibile farlo utilizzando un initialiser in questo modo:

array A = {{1,2,3,},{4,5,6}}; // A now has the dimensions [2][3] 

ma non si può dire:

array A; 

In questo caso, prima dimensione A s' non è specificato, in modo che il compilatore doesn Sappiamo quanto spazio dedicare a questo.

noti che è anche bene utilizzare questo array tipo in una definizione di funzione - come array di definizioni di funzione sono sempre convertiti puntatori al loro primo elemento dal compilatore:

// these are all the same 
void foo(array A); 
void foo(int A[][3]); 
void foo(int (*A)[3]); // this is the one the compiler will see 

noti che in questo caso:

void foo(int A[10][3]); 

Il compilatore vede ancora

void foo(int (*A)[3]); 

Quindi, la parte 10 di A[10][3] viene ignorata.

In sintesi:

typedef int array [3][]; // incomplete type, won't compile 
typedef int array [][3]; // int array (of as-yet unspecified length) 
         // of length 3 arrays 
Problemi correlati