[C con Clase] Arreglo multidimensional
Gilberto Cuba Ricardo
gilbert en hlg.rimed.cu
Vie Abr 24 14:43:08 CEST 2009
Salvador Pozo escribió:
> Hola, otra vez:
Hola nuevamente: :)
>>> 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).
Pienso que complicado no, sino desentrañador.
> 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<------
A ver si nos entendemos, porque no fue esto lo que él puso, porque
puso el "const" después del "char", y a mi entender no es lo mismo:
char const *szBidiArray[] = { "String1", "String2" };
que
const char *szBidiArray[] = { "String1", "String2" };
> 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.
Esto lo entendí igual de maravillas.
> Hasta pronto.
Hasta pronto y muchas gracias por los comentarios.
--
Salu2,
Gilbert
Nodo HLG
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Este mensaje ha sido analizado por MailScanner
en busca de virus y otros contenidos peligrosos,
y se considera que está limpio.
Más información sobre la lista de distribución Cconclase