typedef int array [x][];
Che cosa significa. Cosa succederà se abbiamo un typedef simile. Era la mia domanda di intervista.typedef di una matrice multidimensionale?
typedef int array [x][];
Che cosa significa. Cosa succederà se abbiamo un typedef simile. Era la mia domanda di intervista.typedef di una matrice multidimensionale?
Riceverai una diagnostica.
int [x][]
è un tipo di array incompleto che non può essere completato.
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.
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
Per maggiori dettagli sul parsing typedef: http://publications.gbdirect.co.uk/c_book/chapter8/typedef.html –