Documentos de Académico
Documentos de Profesional
Documentos de Cultura
int *ptr;
ptr=(int*)malloc(sizeof(int) );
lo que es idéntico a:
ptr=(int*)malloc(sizeof(int) * 1);
*ptr=10;
// o
ptr[0]=10;
© Éditions ENI - Todos los derechos reservados - Copia personal de JAIRO ENRIQUE MARTINEZ BANDA -1-
JAIRO ENRIQUE MARTINEZ BANDA
Y para tener más de un elemento en la tabla, basta con asignar más memoria,
proporcionalmente al número de elementos. Por ejemplo, para tener una
tabla de 16 enteros:
int *ptr
ptr=(int*)malloc(sizeof(int)*16);
int i,
for (i=0; i<16; i++){
ptr[i]=rand()%100; // inicializacin
printf("ptr[%d]=%d",i, ptr[i]); // visualizacin
}
int*ptr, tam;
tam=rand();
ptr=(int*)malloc(sizeof(int)*tam);
© Éditions ENI - Todos los derechos reservados - Copia personal de JAIRO ENRIQUE MARTINEZ BANDA -2-
JAIRO ENRIQUE MARTINEZ BANDA
ptr=(int*)malloc(sizeof(int)*tam;
if ( ptr==NULL)
exit(EXIT_FAILURE);
¿Qué es una matriz? Una matriz es una tabla de tablas de objetos de un tipo
determinado. Por ejemplo, una matriz de enteros:
int mat[4][7]
© Éditions ENI - Todos los derechos reservados - Copia personal de JAIRO ENRIQUE MARTINEZ BANDA -3-
JAIRO ENRIQUE MARTINEZ BANDA
int**mat;
El primer nivel de puntero sirve para asignar una tabla de punteros. Es la tabla
de las filas y tiene el tamaño del número de filas deseado. Por ejemplo, si se
pretende crear una matriz de enteros de 4 filas por 7 columnas, a
continuación se muestra cómo crear una tabla de punteros para hacer 4 filas:
int**mat;
mat=(int**)malloc(sizeof(int*)*4);
Representada gráficamente:
© Éditions ENI - Todos los derechos reservados - Copia personal de JAIRO ENRIQUE MARTINEZ BANDA -4-
JAIRO ENRIQUE MARTINEZ BANDA
Representada gráficamente:
#include <stdio.h>
#include <stdlib.h>
srand(time(NULL));
© Éditions ENI - Todos los derechos reservados - Copia personal de JAIRO ENRIQUE MARTINEZ BANDA -5-
JAIRO ENRIQUE MARTINEZ BANDA
do{
tx=1+rand()%30; // 2
ty=1+rand()%10;
mat=(int**)malloc(sizeof(int*)*ty);
for (i=0; i<ty; i++){
mat[i]=(int*)malloc(sizeof(int)*tx);
return 0;
}
© Éditions ENI - Todos los derechos reservados - Copia personal de JAIRO ENRIQUE MARTINEZ BANDA -6-
JAIRO ENRIQUE MARTINEZ BANDA
ˇ
Asignación dinámica de la tabla de punteros de ty filas.
ˇ
Asignación dinámica de cada fila de la tabla con tx columnas.
int ***tab;
tab=(int***)malloc(sizeof(int**)*10);
for (z=0; z<10;z++){
tab[z]=(int**)malloc(sizeof(int*)*20);
for (y=0; y<20; y++)
tab[z][y]=(int*)malloc(sizeof(int)*30);
}
Sin embargo, no es muy frecuente. En general, son sobre todo las tablas de
una o dos dimensiones las que reciben una asignación dinámica.
© Éditions ENI - Todos los derechos reservados - Copia personal de JAIRO ENRIQUE MARTINEZ BANDA -7-
JAIRO ENRIQUE MARTINEZ BANDA
© Éditions ENI - Todos los derechos reservados - Copia personal de JAIRO ENRIQUE MARTINEZ BANDA -8-
JAIRO ENRIQUE MARTINEZ BANDA
a. Función calloc()
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num,i;
int*tab;
printf("entrar el tamaæo de la tabla:\n"
); // 1
scanf("%d",&num);
tab=(int*)calloc(num,sizeof(int)); // 2
for (i=0; i<num; i++){ // 3
© Éditions ENI - Todos los derechos reservados - Copia personal de JAIRO ENRIQUE MARTINEZ BANDA -9-
JAIRO ENRIQUE MARTINEZ BANDA
tab[i]=rand()%256;
printf("tab[%d]=%d\n"
,i,tab[i]);
}
return 0;
}
b. Función realloc()
© Éditions ENI - Todos los derechos reservados - Copia personal de JAIRO ENRIQUE MARTINEZ BANDA - 10 -
JAIRO ENRIQUE MARTINEZ BANDA
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num,i,k;
int *tab=NULL; // 1
(2) El programa reasigna diez veces el espacio de memoria apuntado por tab.
Cada vez se solicita al usuario que entre un nuevo tamaño, se obtiene el valor
introducido mediante la función
© Éditions ENI - Todos los derechos reservados - Copia personal de JAIRO ENRIQUE MARTINEZ BANDA - 11 -
JAIRO ENRIQUE MARTINEZ BANDA
Ejercicio 1
ˇ
El usuario entra el tamaño para una tabla de enteros.
ˇ
Una función asigna dinámicamente memoria para la tabla.
ˇ
Una función inicializa la tabla con números aleatorios crecientes.
ˇ
Una función muestra la tabla.
ˇ
Se permita salir o volver a comenzar (si se vuelve a comenzar hay
que liberar la memoria).
Ejercicio 2
© Éditions ENI - Todos los derechos reservados - Copia personal de JAIRO ENRIQUE MARTINEZ BANDA - 12 -
JAIRO ENRIQUE MARTINEZ BANDA
typedef struct{
int num_elem; // nœmero de elementos
int*tab; // tabla potencial
}t_tabla;
1) Escribir la función:
2) Escribir la función:
3) Escribir la función:
© Éditions ENI - Todos los derechos reservados - Copia personal de JAIRO ENRIQUE MARTINEZ BANDA - 13 -
JAIRO ENRIQUE MARTINEZ BANDA
4) Escribir la función:
5) Escribir la función:
que crea una nueva tabla de igual tamaño que tab, pero inicializada con la
copia de los valores de tab.
Ejercicio 3
En un programa:
ˇ
Escribir una función de entrada de una cadena de caracteres; la
función no tiene parámetros.
ˇ
Escribir una función de concatenación de dos cadenas de caracteres;
la función tiene dos parámetros que son las cadenas que se
concatenarán y devuelve una tercera cadena que es la
concatenación.
ˇ
Introducir dos cadenas y mostrar la concatenación.
© Éditions ENI - Todos los derechos reservados - Copia personal de JAIRO ENRIQUE MARTINEZ BANDA - 14 -
JAIRO ENRIQUE MARTINEZ BANDA
ˇ
Salir o volver a empezar (ojo con la memoria).
ˇ
Escribir la función de carga que reciba por parámetro una tabla del
tamaño exacto.
ˇ
Escribir una función de visualización de la tabla.
ˇ
Comprobar en un programa. Iniciar varias veces el programa
modificando cada vez el contenido del archivo de texto.
Ejercicio 5
En un programa:
ˇ
Introducir una frase.
ˇ
Pasar esta frase a una función que devuelva una de las palabras de la
frase al azar.
© Éditions ENI - Todos los derechos reservados - Copia personal de JAIRO ENRIQUE MARTINEZ BANDA - 15 -
JAIRO ENRIQUE MARTINEZ BANDA
ˇ
Mostrar la frase y la palabra seleccionada.
ˇ
Salir o volver a empezar.
Ejercicio 6
En un programa:
ˇ
El usuario introduce las dos dimensiones de una matriz de enteros.
ˇ
Una función asigna la memoria dinámicamente a la matriz.
ˇ
Una función inicializa la matriz con números aleatorios crecientes.
ˇ
Una función muestra la matriz.
ˇ
Salir o volver a comenzar (si se vuelve a comenzar, liberar la
memoria).
Ejercicio 7
typedef struct{
int ty, tx; // filas, columnas
int**tab; // matriz
}t_matriz;
© Éditions ENI - Todos los derechos reservados - Copia personal de JAIRO ENRIQUE MARTINEZ BANDA - 16 -
JAIRO ENRIQUE MARTINEZ BANDA
1) Escribir la función:
2) Escribir la función:
3) Escribir la función:
4) Escribir la función:
5) Escribir la función:
© Éditions ENI - Todos los derechos reservados - Copia personal de JAIRO ENRIQUE MARTINEZ BANDA - 17 -
JAIRO ENRIQUE MARTINEZ BANDA
que crea una nueva matriz de un tamaño idéntico al de mat e inicializa los
valores de la copia con los valores de mat, simplemente copiándolos.
ˇ
Escribir la función de carga que reciba por parámetro una matriz del
tamaño adecuado.
ˇ
Escribir una función de visualización de la matriz.
ˇ
Comprobar en un programa. Iniciar varias veces el programa
© Éditions ENI - Todos los derechos reservados - Copia personal de JAIRO ENRIQUE MARTINEZ BANDA - 18 -
JAIRO ENRIQUE MARTINEZ BANDA
Ejercicio 9
Primera parte:
ˇ
Definir un tipo para almacenar un contacto.
ˇ
El usuario introduce el número de contactos que quiere añadir.
ˇ
Asignar dinámicamente una tabla para almacenar los contactos. Al
finalizar todos los contactos serán 0.
ˇ
Escribir una función de inicialización de un contacto y rellenar la
tabla.
ˇ
Mostrar la tabla rellenada.
ˇ
Guardar en binario la tabla y su tamaño (si conoce el uso de
archivos).
ˇ
Cargar: obtener toda la base de datos en una tabla del
© Éditions ENI - Todos los derechos reservados - Copia personal de JAIRO ENRIQUE MARTINEZ BANDA - 19 -
JAIRO ENRIQUE MARTINEZ BANDA
tamaño adecuado.
ˇ
Añadir: aumentar el tamaño de la tabla y añadir un contacto.
ˇ
Eliminar: elegir el contacto que se eliminará, eliminarlo y disminuir el
tamaño de la tabla.
ˇ
Guardar: archivo binario, tabla y su tamaño.
Ejercicio 11
ˇ
Una función asigna memoria dinámicamente a una tabla de t
punteros de enteros. La primera vez, todos los punteros serán NULL,
es decir, serán ((int*) 0).
ˇ
Una función inicializa valores y otra función los muestra.
ˇ
El programa finaliza o vuelve a empezar a decisión del usuario.
© Éditions ENI - Todos los derechos reservados - Copia personal de JAIRO ENRIQUE MARTINEZ BANDA - 20 -