Presentación de PowerPoint · Punteros void * La función malloc devuelve un puntero...
Transcript of Presentación de PowerPoint · Punteros void * La función malloc devuelve un puntero...
![Page 1: Presentación de PowerPoint · Punteros void * La función malloc devuelve un puntero inespecífico, que no apunta a ningún tipo de datos determinado. En C, estos punteros sin tipo](https://reader030.fdocuments.net/reader030/viewer/2022040612/5f04ceda7e708231d40fceea/html5/thumbnails/1.jpg)
Unidad III Punteros
Algoritmo, Estructuras y Programación II
Ing. Marglorie Colina
![Page 2: Presentación de PowerPoint · Punteros void * La función malloc devuelve un puntero inespecífico, que no apunta a ningún tipo de datos determinado. En C, estos punteros sin tipo](https://reader030.fdocuments.net/reader030/viewer/2022040612/5f04ceda7e708231d40fceea/html5/thumbnails/2.jpg)
Paso de Punteros a una Función
Ejemplo:
![Page 3: Presentación de PowerPoint · Punteros void * La función malloc devuelve un puntero inespecífico, que no apunta a ningún tipo de datos determinado. En C, estos punteros sin tipo](https://reader030.fdocuments.net/reader030/viewer/2022040612/5f04ceda7e708231d40fceea/html5/thumbnails/3.jpg)
Arreglos (Arrays) Unidimensionales
Los Arreglos son una colección de variables del mismo tipo que se referencian por un
nombre común. A un elemento especifico de un arreglo se accede mediante su índice.
Los arreglos unidimensionales son listas de información del mismo tipo que se
guardan en posiciones contiguas de memoria según el orden del índice.
La forma general de declaración es:
tipo nombre_variable[tamaño];
Inicialización de arreglos: C permite la inicialización de arreglos en el momento de
declararlos, como cualquier variable. La forma general es:
tipo nombre[tamaño] ={lista de valores separados por comas};
Ejemplos:
int i[10]= {1,2,3,4,5,6,7,8,9,10};
char cad[11]= “Me gusta C”;
char cad= {‘M’,’e’.’’,’g’,’u’,’s’,’t’,’a’,’C’,’\0’ };
![Page 4: Presentación de PowerPoint · Punteros void * La función malloc devuelve un puntero inespecífico, que no apunta a ningún tipo de datos determinado. En C, estos punteros sin tipo](https://reader030.fdocuments.net/reader030/viewer/2022040612/5f04ceda7e708231d40fceea/html5/thumbnails/4.jpg)
Aritmética de punteros
Utilizando la aritmética de punteros nos desplazamos de unas posiciones de
memoria a otras. Pero. ¿cómo acceder a los contenidos de esas posiciones utilizando
notación de punteros?
![Page 5: Presentación de PowerPoint · Punteros void * La función malloc devuelve un puntero inespecífico, que no apunta a ningún tipo de datos determinado. En C, estos punteros sin tipo](https://reader030.fdocuments.net/reader030/viewer/2022040612/5f04ceda7e708231d40fceea/html5/thumbnails/5.jpg)
Punteros y Arreglos
Ejemplo:
![Page 6: Presentación de PowerPoint · Punteros void * La función malloc devuelve un puntero inespecífico, que no apunta a ningún tipo de datos determinado. En C, estos punteros sin tipo](https://reader030.fdocuments.net/reader030/viewer/2022040612/5f04ceda7e708231d40fceea/html5/thumbnails/6.jpg)
Punteros y Arreglos
Ejemplo:
![Page 7: Presentación de PowerPoint · Punteros void * La función malloc devuelve un puntero inespecífico, que no apunta a ningún tipo de datos determinado. En C, estos punteros sin tipo](https://reader030.fdocuments.net/reader030/viewer/2022040612/5f04ceda7e708231d40fceea/html5/thumbnails/7.jpg)
Asignación Dinámica de Memoria
El espacio de la variable asignada dinámicamente se crea durante la ejecución
del programa, al contrario que en el caso de una variable local, cuyo espacio se
asigna en tiempo de compilación.
El programa puede crear o destruir la asignación dinámica en cualquier momento
durante la ejecución.
Las variables y vectores en C ocupan un tamaño prefijado, no pueden variarlo
durante la ejecución del programa.
Por medio de punteros se puede reservar o liberar memoria dinámicamente, es
decir, según se necesite. Para ello existen varias funciones estándares de la
biblioteca <stdlib.h>
![Page 8: Presentación de PowerPoint · Punteros void * La función malloc devuelve un puntero inespecífico, que no apunta a ningún tipo de datos determinado. En C, estos punteros sin tipo](https://reader030.fdocuments.net/reader030/viewer/2022040612/5f04ceda7e708231d40fceea/html5/thumbnails/8.jpg)
Función malloc
La función malloc está declarada en el archivo de cabecera stdlib.h.
Sirve para solicitar un bloque de memoria del tamaño (bytes) suministrado
como parámetro.
Devuelve un puntero a la zona de memoria concedida.
Void * malloc(unsigned numero_de_bytes);
El puntero se utiliza para referenciar el bloque de memoria y devuelve
un puntero del tipo void *.
La forma de llamar a la función malloc() es:
puntero = malloc(tamaño en bytes)
![Page 9: Presentación de PowerPoint · Punteros void * La función malloc devuelve un puntero inespecífico, que no apunta a ningún tipo de datos determinado. En C, estos punteros sin tipo](https://reader030.fdocuments.net/reader030/viewer/2022040612/5f04ceda7e708231d40fceea/html5/thumbnails/9.jpg)
Si malloc es incapaz de conceder el bloque (por ejemplo, si no hay
memoria suficiente), devuelve un puntero nulo
Función malloc
tipo * puntero;
puntero = (tipo *)malloc(tamaño en bytes);
Generalmente, se hará una conversión al tipo de puntero:
Ejemplo:
int *p;
p = (int *)malloc(4)
El tamaño se especifica en bytes. Se garantiza que la zona de memoria
concedida no está ocupada por ninguna otra variable ni otra zona devuelta por
malloc.
![Page 10: Presentación de PowerPoint · Punteros void * La función malloc devuelve un puntero inespecífico, que no apunta a ningún tipo de datos determinado. En C, estos punteros sin tipo](https://reader030.fdocuments.net/reader030/viewer/2022040612/5f04ceda7e708231d40fceea/html5/thumbnails/10.jpg)
char* ptr = (char*)malloc(1000);
Punteros void *
La función malloc devuelve un puntero inespecífico, que no apunta a ningún
tipo de datos determinado. En C, estos punteros sin tipo se declaran como void*
Muchas funciones que devuelven direcciones de memoria utilizan los
punteros void*. Un puntero void* puede convertirse a cualquier otra clase de
puntero:
![Page 11: Presentación de PowerPoint · Punteros void * La función malloc devuelve un puntero inespecífico, que no apunta a ningún tipo de datos determinado. En C, estos punteros sin tipo](https://reader030.fdocuments.net/reader030/viewer/2022040612/5f04ceda7e708231d40fceea/html5/thumbnails/11.jpg)
El tamaño de un char siempre es 1 (uno).
Operador sizeof
Así, si se quiere reservar memoria para un buffer de 10 enteros:
int *r;
r = (int *)malloc(10*sizeof(int));
El problema de malloc es conocer cuántos bytes se quieren reservar. Si se
quiere reservar una zona para diez enteros, habrá que multiplicar diez por el
tamaño de un entero.
El tamaño en bytes de un elemento de tipo T se obtiene con la expresión:
sizeof( T)
El operador unario sizeof se utiliza con mucha frecuencia en las funciones de
asignación de memoria. El operador se aplica a un tipo de dato (o una variable),
el valor resultante es el número de bytes que ocupa.
![Page 12: Presentación de PowerPoint · Punteros void * La función malloc devuelve un puntero inespecífico, que no apunta a ningún tipo de datos determinado. En C, estos punteros sin tipo](https://reader030.fdocuments.net/reader030/viewer/2022040612/5f04ceda7e708231d40fceea/html5/thumbnails/12.jpg)
Si ptr apunta a una zona de memoria indebida, los efectos pueden ser
desastrosos, igual que si se libera dos veces la misma zona.
Función free
Cuando una zona de memoria reservada con malloc ya no se necesita, puede
ser liberada mediante la función free.
void free (void* ptr);
ptr es un puntero de cualquier tipo que apunta a un área de memoria
reservada previamente con malloc.
![Page 13: Presentación de PowerPoint · Punteros void * La función malloc devuelve un puntero inespecífico, que no apunta a ningún tipo de datos determinado. En C, estos punteros sin tipo](https://reader030.fdocuments.net/reader030/viewer/2022040612/5f04ceda7e708231d40fceea/html5/thumbnails/13.jpg)
Ejemplo
![Page 14: Presentación de PowerPoint · Punteros void * La función malloc devuelve un puntero inespecífico, que no apunta a ningún tipo de datos determinado. En C, estos punteros sin tipo](https://reader030.fdocuments.net/reader030/viewer/2022040612/5f04ceda7e708231d40fceea/html5/thumbnails/14.jpg)
Ejercicios