[C con Clase] Arreglo multidimensional

Salvador Pozo salvapozo en gmail.com
Mie Abr 22 18:15:07 CEST 2009


>> char *szBidiArray[] = { "String1",  "String2" };
>
> Aquí tengo tambien mis dudas:
>
> Esto sería en la traducción al español que: szBidiArray es un arreglo de punteros char, no? Por lo que, si es así, entonces yo podré cambiar el contenido de szBidiArray[0] y cualquier otra posición, pero manteniendo el tamaño de la cadena declarada en la inicialización, de otra forma, que pasaría?,
> estaría violando otro espacio de memoria que no fuera el reservado por ella?
> qué pasaría además si yo hiciera szBidiArray[2] = "String3".

Hola:

Hay que distinguir entre modificar el contenido de una cadena y
modificar el valor de un elemento del array. El array contiene
punteros, por lo tanto, no hay ningún peligro en modificar los valores
del array (salvo los derivados de trabajar con punteros).

Eso contesta a tu segunda pregunta. Si haces la asignación
szBidiArray[2] = "String3", sencillamente modificarás el valor del
tercer elemento del array. No hay problema por asignarle un puntero,
pero sí por hacerlo en la tercera posición, ya que el array ha sido
declarado (implícitamente) de dos elementos.

En cuanto a la primera pregunta: sí, se trata de un array de punteros.
Y precisamente por eso, no hay problema en asignar punteros a cadenas
de longitudes diferentes a las iniciales, o punteros nulos:

szBidiArray[0] = "Una cadena mucho más larga";
szBidiArray[1] = NULL;

En este caso, tendrás problemas si quieres asignar valores diferentes
a las cadenas, sean o no de la misma longitud.

La sentencia:
szBidiArray[1][0] = 'S';

Producirá un error, puesto que hemos inicializado el array con cadenas
literales, y estas, por definición son constantes.

szbidi.cpp 4 error: assignment of read-only location|

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