[C con Clase] Arreglo multidimensional

Salvador Pozo salvapozo en gmail.com
Mie Abr 22 10:45:26 CEST 2009


Hola:

El día 22 de abril de 2009 0:19, kalith kalith <kalith.9 en gmail.com> escribió:
> tengo una pregunta porque cuando se usa punteros solo debemos poner unos
> corchetes y no los dos

Estás dando por supuesto que declarar un array con dos índices (dos
dimensiones) es lo mismo que declarar un array de punteros, pero no es
así.

En el primer caso se trata de una tabla, todos los elementos del array
se almacenan en posiciones de memoria con direcciones contiguas, y la
posición de cada elemento se puede calcular de forma aritmética.

Por ejemplo:
char tabla[4][4];

Crea una tabla de cuatro x cuatro caracteres, cada uno de los cuales
se almacena en posiciones sucesivas. Si el primer elemento,
tabla[0][0], tiene la dirección 'n' el siguiente, tabla[0][1] tendrá
la 'n+1', tabla[0][2] la 'n+2', etc.

Si cambiamos de fila, tabla[1][0] tendrá la dirección 'n+4', y el
siguiente, tabla[1][1],  'n+5'.

La dirección de cualquier elemento se puede calcular como n+(fila*nº
filas)+columna.
Por eso es necesario conocer todas las dimensiones menos la primera
cuando se hace la declaración.

Sin embargo, cuando se declara un array de punteros, lo que
almacenamos posiciones de memoria correlativas son punteros.

Por ejemplo:

char *tabla2[4];

Crea una tabla que puede contener cuatro punteros a char en posiciones
de memoria correlativas.

Si además iniciamos el array:

char *tabla[2] = {"uno", "dos", "tres", "cuatro"};

Estaremos asignando valores iniciales a esos punteros, pero las
cadenas a las que apunta cada una no tienen por qué estar en
posiciones correlativas. Además, las posiciones de cada elemento ya no
se pueden calcular de forma aritmética a partir de la dirección del
primer elemento.

Por ejemplo, la dirección tabla[2][3] ya no es la de tabla[0][0] +
2*(algo) + 3. Para empezar, no se puede determinar el valor de "algo",
ya que cada cadena puede tener una longitud diferente. Pero no se
podría ni aunque todas las cadenas tuvieran la misma longitud.

La dirección de tabla[2][3] es tabla[2] + 3. Recuerda que tabla es un
array de punteros, por lo que tabla[2] contiene un puntero, que es la
dirección de la cadena "tres".

Hasta pronto.
-- 
Salvador Pozo Coronado
http://www.conclase.net
mailto:salvapozo en gmail.com




Más información sobre la lista de distribución Cconclase