[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