2012-01-08 32 views

Respuesta

1

Obtendrá un diagnóstico.

int [x][] es un tipo de matriz incompleta que no se puede completar.

3

Aparecerá un error de compilación. Para matrices multidimensionales, a lo sumo se puede omitir la primera dimensión. Entonces, por ejemplo, int array[][x] sería válido en su lugar.

+1

Para más detalles sobre el análisis typedef: http://publications.gbdirect.co.uk/c_book/chapter8/typedef.html –

8

Supongamos que usted tiene en alguna parte:

#define x 3 

Como otros señalan, typedef int array [3][]; no se compilará. Solo puede omitir el elemento más significativo (es decir, el primero) de una longitud de matriz.

Pero puede decir:

typedef int array [][3]; 

Esto significa que array es una matriz int (de longitud, que aún no especificado) de longitud 3 matrices.

Para usarlo, debe especificar la longitud. Usted puede hacer esto mediante el uso de un inicializador de este modo:

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

pero no se puede decir:

array A; 

En este caso, la primera dimensión A 's no se especifica, por lo que el compilador doesn No sé cuánto espacio asignarle.

Tenga en cuenta que también es muy bien utilizar este tipo array en una definición de función - como matrices en la definición de funciones siempre se convierten en punteros a su primer elemento por el compilador:

// 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 

Nótese que en este caso:

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

El compilador todavía ve

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

Por lo tanto, se ignora la parte 10 de A[10][3].

En resumen:

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