[C con Clase] Arreglo multidimensional

Salvador Pozo salvapozo en gmail.com
Mie Abr 22 18:24:12 CEST 2009


Hola, otra vez: :-)

>>   char const *szBidiArray[] = { "String1", "String2" };
>
> Este me huele a que va por el mismo camino que lo que me planteó
> Moises Brenes, pero entonces aquí veo la diferencia de que es: un
> arreglo de punteros constantes de char, donde (según mi entender) lo
> que no puedo variar es a donde apunta cada las posiciones de los
> arreglos de cadena, es decir, que serían fijas, pero no limitadas a 2
> en el ejemplo.

En realidad no. (Parece que este tema está siendo complicado).

Esta sería la forma correcta de declarar el array, si asumimos que
sólo va a contener punteros a cadenas literales.

Lo que estamos declarando es un array de punteros a cadenas
constantes, es decir, lo que no puede cambiar es el valor de las
cadenas, pero sí el de los punteros.

----8<------
int main() {
const char *szBidiArray[] = {"string 1", "string 2"};

szBidiArray[1] = "hola";
return 0;
}
----8<------

Este ejemplo es válido, ya que todas las cadenas son literales (constantes).

Aún así, podemos asignar cadenas no constantes a elementos de este
array, pero no podremos modificarlas usando el array como
identificador:

----8<------
int main() {
const char *szBidiArray[] = {"string 1", "string 2"};
char cad[10];

cad[0] = 'H';
cad[1] = 'o';
cad[2] = 'l';
cad[3] = 'a';
cad[4] = 0;

szBidiArray[1] = cad;

cad[1] = 'a'; // Legal (1)
szBidiArray[1][1] = 'a'; // Error (2)

return 0;
}
----8<------

En este ejemplo vemos que asignamos a szBidiArray[1] la dirección de
una cadena no constante, cad. En (1) es evidente que podemos modificar
cualquier posición de la cadena, lo hemos hecho antes para asignarle
el valor "Hola", carácter a carácter.

En (2) no podemos, a pesar de que estamos accediendo a la misma
posición, ya que szBidiArray contiene punteros a cadenas constantes,
por lo que el compilador impide que se modifiquen esas cadenas.

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