[C con Clase] Dudas de arrays
Steven Davidson
srd4121 en njit.edu
Lun Jun 14 05:16:03 CEST 2010
Hola Javier,
Javier Cancio del Busto wrote:
> Hola,
>
> Siguiendo el tutorial de la web, he visto dos ejemplos que no me
> quedan muy claros... dicen:
>
> ¿Cuantos elementos contiene cada uno de los siguientes arrays?
>
> 1) int y[][3] = {3,6,7,2,3,1,2,4};
>
> 2)char z[][2][10] = {"hola", "adios", "", "saludo", "chao"};
>
>
> No entiendo cómo se calculan los elementos en estos dos casos... :S
>
El compilador puede inducir la cantidad de elementos porque existe una
inicialización con los valores entre las llaves en la definición de los
arrays.
1) 'y' es un array de X elementos, los cuales son 3 arrays de tipo
'int'. Mirando los elementos y conociendo los tipos de cada uno, podemos
determinar el valor de X - la cantidad de arrays.
Como cada elemento trata de 3 arrays de enteros, entonces cada grupo de
3 enteros es un elemento. Es decir,
y[0] := {3,6,7}
y[1] := {2,3,1}
y[2] := {2,4,0}
Por lo tanto, 'y' es un array de 3 elementos, los cuales son 3 arrays de
tipo 'int'. Conceptualmente, tenemos una tabla o matriz de 3x3 de
enteros. Podríamos reescribir la definición de este array como:
int y[3][3] = {3,6,7,2,3,1,2,4};
Por último, recuerda que si no hay suficientes elementos en la
inicialización para la cantidad de elementos en la variable, entonces se
rellenan los demás con 0 (cero) del tipo adecuado. Por esta razón,
'y[2]' contendrá el array de los tres elementos: 2, 4, y 0.
2) 'z' es un array de N elementos, los cuales son 2 arrays, cuyos
elementos son 10 arrays de tipo 'int'. Aplicamos el mismo razonamiento
que en 1). Ten presente que una cadena literal de caracteres se
representa como un array de tipo 'char' con un carácter nulo al final.
Por lo tanto, cada cadena literal es otro array.
Al final, obtenemos una matriz tridimensional de Nx2x10 de caracteres.
Esto es:
z[0] := { "hola\0\0\0\0\0\0", "adios\0\0\0\0\0\0" }
z[1] := { "\0\0\0\0\0\0\0\0\0\0", "saludo\0\0\0\0" }
z[2] := { "ciao\0\0\0\0\0\0\0", "\0\0\0\0\0\0\0\0\0\0" }
Nuevamente, tenemos 3 elementos para la primera "dimensión".
Fíjate que las cadenas deben caber en el array de 10 'char'. Como se
trata de una inicialización, se rellenan con ceros (de tipo 'char') los
demás elementos para completar el array.
Espero haber aclarado la duda.
Steven
Más información sobre la lista de distribución Cconclase