Page 236

4.2 Matrices din´amicas

16

strcpy(cadena3, cadena1); strcat(cadena3, cadena2);

17 18 19

printf ("Resultado de concatenar ambos: %s\n", cadena3);

20 21

free(cadena3); cadena3 = NULL;

22 23 24

return 0;

25 26

}

Como las dos primeras cadenas se leen con gets, hemos de definirlas como cadenas est´aticas. La tercera cadena reserva exactamente la misma cantidad de memoria que ocupa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . · 229 Dise˜ na una funci´ on que lea una cadena y construya otra con una copia invertida de la primera. La segunda cadena reservar´a s´olo la memoria que necesite. · 230 Dise˜ na una funci´ on que lea una cadena y construya otra que contenga un ejemplar de cada car´ acter de la primera. Por ejemplo, si la primera cadena es "este ejemplo", la segunda ser´a "est jmplo". Ten en cuenta que la segunda cadena debe ocupar la menor cantidad de memoria posible. .............................................................................................

Sobre la mutabilidad de las cadenas Es posible inicializar un puntero a cadena de modo que apunte a un literal de cadena: char * p = "cadena"; Pero, ¡ojo!, la cadena apuntada por p es, en ese caso, inmutable: si intentas asignar un char a p[i], el programa puede abortar su ejecuci´ on. ¿Por qu´e? Porque los literales de cadena ((residen)) en una zona de memoria especial (la denominada ((zona de texto))) que est´ a protegida contra escritura. Y hay una raz´ on para ello: en esa zona reside, tambi´en, el c´ odigo de m´ aquina correspondiente al programa. Que un programa modifique su propio c´ odigo de m´ aquina es una p´esima pr´ actica (que era relativamente frecuente en los tiempos en que predominaba la programaci´ on en ensamblador), hasta el punto de que su zona de memoria se marca como de s´ olo lectura.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . · 231 Implementa una funci´ on que reciba una cadena y devuelva una copia invertida. (Ten en cuenta que la talla de la cadena puede conocerse con strlen, as´ı que no es necesario que suministres la talla expl´ıcitamente ni que devuelvas la talla de la memoria solicitada con un par´ametro pasado por referencia.) Escribe un programa que solicite varias palabras a un usuario y muestre el resultado de invertir cada una de ellas. .............................................................................................

4.2.

Matrices din´ amicas

Podemos extender la idea de los vectores din´amicos a matrices din´amicas. Pero el asunto se complica notablemente: no podemos gestionar la matriz como una sucesi´on de elementos contiguos, sino como un ((vector din´ amico de vectores din´amicos)).

4.2.1.

Gesti´ on de memoria para matrices din´ amicas

Analiza detenidamente este programa: 230

Introducci´ on a la Programaci´ on con C

Profile for esLibre.com

Introducción a la programación con c  

Introducción a la programación con c  

Advertisement