typedef int array [x][];
¿Qué significa eso? ¿Qué pasará si tenemos un typedef así? Fue mi pregunta de entrevista.typedef de una matriz multidimensional?
typedef int array [x][];
¿Qué significa eso? ¿Qué pasará si tenemos un typedef así? Fue mi pregunta de entrevista.typedef de una matriz multidimensional?
Obtendrá un diagnóstico.
int [x][]
es un tipo de matriz incompleta que no se puede completar.
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.
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
Para más detalles sobre el análisis typedef: http://publications.gbdirect.co.uk/c_book/chapter8/typedef.html –