[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