SlideShare una empresa de Scribd logo
1 de 18
http://www.eps.uam.es/~phaya
PROG-I
2009-10
PUNTEROS Y
GESTIÓN DINÁMICA
DE MEMORIA
Tema 4 – 4.5
N
U
L
L
'P' 'H' 'C'
lista
PROG-I /18PROG-I
Objetivos
Semana 6
4.1 Definir macros y tipos de datos en C
4.2 Hacer uso de arrays y estructuras
Semana 7
4.3 Tipos de datos definidos por el programador
4.4 Ficheros
Semana 8 y 9
4.5 Punteros y gestión dinámica de memoria
Curso 2009-10Tema 4 - Tipos de datos 2
Gestión dinámica de la
memoria
PROG-I /18PROG-I
Problemas arrays
 El tamaño del array está prefijado en tiempo
de compilación.
 Si el número de elementos de entrada es muy
variable de una ejecución a otra ¿no se podría
reserva memoria en tiempo de ejecución en
función de cuantos elementos quiero
almacenar.
typedef struct {
Elemento e[MAX_ELEM]
int n;
} Vector;
Vector v;
Curso 2009-10 4Tema 4 - Tipos de datos
PROG-I /18PROG-I
Reserva memoria dinámica
 malloc, calloc: procedimiento que
reseva dinámicamente (tiempo de
ejecución) memoria para almacenar
una variable del tipo puntero.
 free: libera la memoria reservada
anterioremente.
 NULL: valor que representa una
dirección de memoria vacía.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int * pa;
pa = (int *) malloc(sizeof(int));
*pa = 54;
printf("%dn", *pa); /*???*/
free(pa);
pa = NULL;
return 0;
}
ee
punteros3.c
main
heap
int * pa;
papa
Curso 2009-10 5Tema 4 - Tipos de datos
PROG-I /18PROG-I
 malloc, calloc: procedimiento que
crea dinámicamente (tiempo de
ejecución) memoria para almacenar
una variable del tipo puntero.
 free: libera la memoria reservada
anterioremente.
 NULL: valor que representa una
dirección de memoria vacía.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int * pa;
pa = (int *) malloc(sizeof(int));
*pa = 54;
printf("%dn", *pa); /*???*/
free(pa);
pa = NULL;
return 0;
}
ee
punteros3.c
main
papa
heap
????
pa = (int *) malloc(sizeof(int));
Reserva memoria dinámica
Curso 2009-10 6Tema 4 - Tipos de datos
PROG-I /18PROG-I
 malloc, calloc: procedimiento que
crea dinámicamente (tiempo de
ejecución) memoria para almacenar
una variable del tipo puntero.
 free: libera la memoria reservada
anterioremente.
 NULL: valor que representa una
dirección de memoria vacía.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int * pa;
pa = (int *) malloc(sizeof(int));
*pa = 54;
printf("%dn", *pa); /*???*/
free(pa);
pa = NULL;
return 0;
}
ee
punteros3.c
main
heap
*pa = 54;
papa
5454
Reserva memoria dinámica
Curso 2009-10 7Tema 4 - Tipos de datos
PROG-I /18PROG-I
 malloc, calloc: procedimiento que
crea dinámicamente (tiempo de
ejecución) memoria para almacenar
una variable del tipo puntero.
 free: libera la memoria reservada
anterioremente.
 NULL: valor que representa una
dirección de memoria vacía.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int * pa;
pa = (int *) malloc(sizeof(int));
*pa = 54;
printf("%dn", *pa); /*???*/
free(pa);
pa = NULL;
return 0;
}
ee
punteros3.c
main
heap
*pa = 54;
papa
5454
Reserva memoria dinámica
Curso 2009-10 8Tema 4 - Tipos de datos
PROG-I /18PROG-I
 malloc, calloc: procedimiento que
crea dinámicamente (tiempo de
ejecución) memoria para almacenar
una variable del tipo puntero.
 free: libera la memoria reservada
anterioremente.
 NULL: valor que representa una
dirección de memoria vacía.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int * pa;
pa = (int *) malloc(sizeof(int));
*pa = 54;
printf("%dn", *pa); /*???*/
free(pa);
pa = NULL;
return 0;
}
ee
punteros3.c
main
heap
*pa = 54;
papa
????
Reserva memoria dinámica
Curso 2009-10 9Tema 4 - Tipos de datos
PROG-I /18PROG-I
 malloc, calloc: procedimiento que
crea dinámicamente (tiempo de
ejecución) memoria para almacenar
una variable del tipo puntero.
 free: libera la memoria reservada
anterioremente.
 NULL: valor que representa una
dirección de memoria vacía.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int * pa;
pa = (int *) malloc(sizeof(int));
*pa = 54;
printf("%dn", *pa); /*???*/
free(pa);
pa = NULL;
return 0;
}
ee
punteros3.c
main
heap
pa = NULL;
papa
NULLNULL
Reserva memoria dinámica
Curso 2009-10 10Tema 4 - Tipos de datos
PROG-I /18PROG-I
Reserva y liberación de memoria
 malloc: reserva tanto bytes de memoria como se le indica, y devuelve
un puntero. void=tipo genérico
void * malloc(size_t tam);
int * pa;
pa = (int *) malloc(sizeof(int));
 free: libera el área de memoria referencia por el puntero.
void free(void *ptr);
free(pa);
 calloc: reserva espacio para un array de nelem elementos de tamaño
eltam. Inicializa los elementos del array a cero.
void * calloc(size_t nelem, size_t eltam);
 realloc: cambia el tamaño del espacio apuntado por ptr al nuevo
tamaño tam.
void * realloc(void *ptr, size_t tam);
Curso 2009-10 11Tema 4 - Tipos de datos
PROG-I /18PROG-I
Arrays memoria estática vs
dinámica
Curso 2009-10Tema 4 - Tipos de datos 12
ee
punteros3.c
main
heap
v2 = (int *) calloc(dim, sizeof(int));
v1v1
11

Estática:
 int v1 []={1,2,3};

Dinámica:
int* v2;
int dim;
scanf("%d", &dim); /* suponemos 3 */
v2 = (int *) calloc(dim, sizeof(int));
/*
v2 =(int *) malloc(dim*sizeof(int));
*/
…
free(v2); /*elimina toda la mem.*/
 v2 es un puntero al primer elemento
 *v2  v2[0]
22 33
v2v2
00 00 00
PROG-I /18PROG-I
Arrays memoria estática vs
dinámica
Curso 2009-10Tema 4 - Tipos de datos 13
ee
punteros3.c
main
heap
v1v1
11
 Acceso
v2[0] = 3;
v2[1] = 2;
v2[2] = 1;
/* equivalante a */
*v2 = 3;
*(v2+1) = 2;
*(v2+2) = 1;
22 33
v2v2
33 22 11
PROG-I /18PROG-I
Arrays memoria estática vs
dinámica
Curso 2009-10Tema 4 - Tipos de datos 14
ee
punteros3.c
main
heap
v1v1
11
 v1 ≠ v2 =>
 v1++; //ILEGAL
 v2++; //PELIGROSO
*(v2+1) = 7;
/* No es equivalante */
v2++;
*v2 = 7
22 33
v2v2
33 22 11
v2++;
PROG-I /18PROG-I
Arrays memoria estática vs
dinámica
Curso 2009-10Tema 4 - Tipos de datos 15
ee
punteros3.c
main
heap
v1v1
11
 Puntero auxiliar
/* Puntero auxiliar */
int * pt;
pt = v2;
pt++;
*pt = 7;
22 33
v2v2
33 77 11
*pt = 7;
ptpt
PROG-I /18PROG-I
Arrays multidimensionales
 double a[FIL][COL];
 double *a[FIL];
 double **a;
a = (double **) malloc(FIL*sizeof(double *));
for (i=0 ; i < FIL; ++i)
a[i] = (double *) malloc(COL*sizeof(double));
. . .
printf("%f", a[1][1]);
a
a
a
for (i=0 ; i < FIL; ++i)
a[i] = (double *) malloc(COL*sizeof(double));
. . .
printf("%f", a[1][1]);
printf("%f", a[1][1]);
Curso 2009-10 16Tema 4 - Tipos de datos
PROG-I /18PROG-I
Arrays de cadenas de caracteres
 char *meses[] = { "Mes incorrecto", "Enero", "Febrero", "Marzo" };
/* eq. a char *meses[4]; */
M e s i n c o r r e c t o 0
E n e r o 0
F e b r e r o 0
M a r z o 0
¿char *meses[4] = char [4][15]?
mesesmeses
Curso 2009-10 17Tema 4 - Tipos de datos
PROG-I /18PROG-I
Argumentos de un programa
 int main(int argc, char *argv[])
 argc: número de argumentos de entrada incluyendo el nombre
del programa.
 argv: array que contiene los argumentos del programa como
cadena de caracteres
 argv[0]: nombre del programa
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) /*int main(int argc, char **argv)*/
{
float x;
if (argc != 2) {
printf("Uso: %s numero_realn", argv[0]);
exit(1);
}
x = atof(argv[1]);
printf("%s: %.3fn", argv[1], x);
return 0;
}
Curso 2009-10 18Tema 4 - Tipos de datos

Más contenido relacionado

La actualidad más candente (20)

Lenguajec++
Lenguajec++Lenguajec++
Lenguajec++
 
Problemas+resueltos+de+c$2 b$2b
Problemas+resueltos+de+c$2 b$2bProblemas+resueltos+de+c$2 b$2b
Problemas+resueltos+de+c$2 b$2b
 
Programación 1: cadenas en C
Programación 1: cadenas en CProgramación 1: cadenas en C
Programación 1: cadenas en C
 
Programación 1: introducción a C
Programación 1: introducción a CProgramación 1: introducción a C
Programación 1: introducción a C
 
Ejemplos Para Dev C++
Ejemplos Para Dev C++Ejemplos Para Dev C++
Ejemplos Para Dev C++
 
Revista digital
Revista digitalRevista digital
Revista digital
 
Programación 1: tipos básicos de datos en C
Programación 1: tipos básicos de datos en CProgramación 1: tipos básicos de datos en C
Programación 1: tipos básicos de datos en C
 
Fpr Tema 2 www.fresymetal.com
Fpr Tema 2 www.fresymetal.comFpr Tema 2 www.fresymetal.com
Fpr Tema 2 www.fresymetal.com
 
Trabajo de ejercicios de lenguaje c
Trabajo de ejercicios de lenguaje cTrabajo de ejercicios de lenguaje c
Trabajo de ejercicios de lenguaje c
 
Ejercicios de programación.
Ejercicios de programación.Ejercicios de programación.
Ejercicios de programación.
 
Tarea 1 bash
Tarea 1 bashTarea 1 bash
Tarea 1 bash
 
Lenguaje C
Lenguaje CLenguaje C
Lenguaje C
 
Bucles anidados 2012
Bucles anidados 2012Bucles anidados 2012
Bucles anidados 2012
 
Presnetación Go
Presnetación GoPresnetación Go
Presnetación Go
 
Divisores de un número (código Dev C++)
Divisores de un número (código Dev C++)Divisores de un número (código Dev C++)
Divisores de un número (código Dev C++)
 
Lenguaje C_Curso Secap
Lenguaje C_Curso SecapLenguaje C_Curso Secap
Lenguaje C_Curso Secap
 
Ejercicios sencillos en c
Ejercicios sencillos en cEjercicios sencillos en c
Ejercicios sencillos en c
 
Programación C++ - DEV C++
Programación C++ - DEV C++Programación C++ - DEV C++
Programación C++ - DEV C++
 
Ejercicios resueltos con Python
Ejercicios resueltos con PythonEjercicios resueltos con Python
Ejercicios resueltos con Python
 
Desarrollo De Programas Ejemplos 01
Desarrollo De Programas Ejemplos 01Desarrollo De Programas Ejemplos 01
Desarrollo De Programas Ejemplos 01
 

Similar a Tema 4 - Tipos datos avanzados (III) (20)

Tema 11
Tema 11Tema 11
Tema 11
 
Memoria dinamica
Memoria dinamicaMemoria dinamica
Memoria dinamica
 
Manejo de la memoria
Manejo de la memoriaManejo de la memoria
Manejo de la memoria
 
4 memoria dinamica
4 memoria dinamica4 memoria dinamica
4 memoria dinamica
 
Cplus
CplusCplus
Cplus
 
C++
C++C++
C++
 
Programación en c++
Programación en c++Programación en c++
Programación en c++
 
Curso c ii
Curso c iiCurso c ii
Curso c ii
 
Curso C Ii
Curso C IiCurso C Ii
Curso C Ii
 
Curso c ii
Curso c iiCurso c ii
Curso c ii
 
Memoria dinamica
Memoria dinamicaMemoria dinamica
Memoria dinamica
 
Programacion RPG: Conceptos ILE
Programacion RPG: Conceptos ILEProgramacion RPG: Conceptos ILE
Programacion RPG: Conceptos ILE
 
Estructuras lineales
Estructuras linealesEstructuras lineales
Estructuras lineales
 
1 Tipos De Datos Ejercicios
1 Tipos De Datos Ejercicios1 Tipos De Datos Ejercicios
1 Tipos De Datos Ejercicios
 
Ejemplos c
Ejemplos cEjemplos c
Ejemplos c
 
Nucleo 2 estructuras dinámicas
Nucleo 2 estructuras dinámicasNucleo 2 estructuras dinámicas
Nucleo 2 estructuras dinámicas
 
Creacion de shellcodes para Exploits en Linux/x86
Creacion de shellcodes para Exploits en Linux/x86 Creacion de shellcodes para Exploits en Linux/x86
Creacion de shellcodes para Exploits en Linux/x86
 
Algoritmos - Funciones C++
Algoritmos - Funciones C++ Algoritmos - Funciones C++
Algoritmos - Funciones C++
 
ED 01 tipos_datos_ejercicios
ED 01 tipos_datos_ejerciciosED 01 tipos_datos_ejercicios
ED 01 tipos_datos_ejercicios
 
Creacion de proyecto_en_netbeans
Creacion de proyecto_en_netbeansCreacion de proyecto_en_netbeans
Creacion de proyecto_en_netbeans
 

Más de Pablo Haya

2017 12-15-iv jornadas innovación psicología
2017 12-15-iv jornadas innovación psicología2017 12-15-iv jornadas innovación psicología
2017 12-15-iv jornadas innovación psicologíaPablo Haya
 
Introducción a la interacción en mesas multicontacto
Introducción a la interacción en mesas multicontactoIntroducción a la interacción en mesas multicontacto
Introducción a la interacción en mesas multicontactoPablo Haya
 
Interaccion natural
Interaccion naturalInteraccion natural
Interaccion naturalPablo Haya
 
Experimentación en Interacción Persona-Ordenador
Experimentación en Interacción Persona-OrdenadorExperimentación en Interacción Persona-Ordenador
Experimentación en Interacción Persona-OrdenadorPablo Haya
 
Diseño de la interacción
Diseño de la interacciónDiseño de la interacción
Diseño de la interacciónPablo Haya
 
Tema 3 - Técnicas básicas de diseño de algoritmos
Tema 3 - Técnicas básicas de diseño de algoritmosTema 3 - Técnicas básicas de diseño de algoritmos
Tema 3 - Técnicas básicas de diseño de algoritmosPablo Haya
 
Tema 1 - Introducción
Tema 1  - IntroducciónTema 1  - Introducción
Tema 1 - IntroducciónPablo Haya
 

Más de Pablo Haya (7)

2017 12-15-iv jornadas innovación psicología
2017 12-15-iv jornadas innovación psicología2017 12-15-iv jornadas innovación psicología
2017 12-15-iv jornadas innovación psicología
 
Introducción a la interacción en mesas multicontacto
Introducción a la interacción en mesas multicontactoIntroducción a la interacción en mesas multicontacto
Introducción a la interacción en mesas multicontacto
 
Interaccion natural
Interaccion naturalInteraccion natural
Interaccion natural
 
Experimentación en Interacción Persona-Ordenador
Experimentación en Interacción Persona-OrdenadorExperimentación en Interacción Persona-Ordenador
Experimentación en Interacción Persona-Ordenador
 
Diseño de la interacción
Diseño de la interacciónDiseño de la interacción
Diseño de la interacción
 
Tema 3 - Técnicas básicas de diseño de algoritmos
Tema 3 - Técnicas básicas de diseño de algoritmosTema 3 - Técnicas básicas de diseño de algoritmos
Tema 3 - Técnicas básicas de diseño de algoritmos
 
Tema 1 - Introducción
Tema 1  - IntroducciónTema 1  - Introducción
Tema 1 - Introducción
 

Último

ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJO
ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJOACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJO
ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJOBRIGIDATELLOLEONARDO
 
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
SESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.docSESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.doc
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.docRodneyFrankCUADROSMI
 
Infografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfInfografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfAlfaresbilingual
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónLourdes Feria
 
PIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonablesPIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonablesYanirisBarcelDelaHoz
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docxEliaHernndez7
 
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdfMiNeyi1
 
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfNUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfUPTAIDELTACHIRA
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioELIASAURELIOCHAVEZCA1
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAEl Fortí
 
Concepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptxConcepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptxFernando Solis
 
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VS
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VSSEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VS
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VSYadi Campos
 
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONALMiNeyi1
 
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docxPLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docxiemerc2024
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Juan Martín Martín
 
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxLA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxlclcarmen
 
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfCurso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfFrancisco158360
 
2024 KIT DE HABILIDADES SOCIOEMOCIONALES.pdf
2024 KIT DE HABILIDADES SOCIOEMOCIONALES.pdf2024 KIT DE HABILIDADES SOCIOEMOCIONALES.pdf
2024 KIT DE HABILIDADES SOCIOEMOCIONALES.pdfMiguelHuaman31
 
Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024IES Vicent Andres Estelles
 

Último (20)

ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJO
ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJOACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJO
ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJO
 
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
SESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.docSESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.doc
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
 
Infografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfInfografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdf
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcción
 
PIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonablesPIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonables
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
 
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf
 
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfNUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
 
Supuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docxSupuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docx
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literario
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
 
Concepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptxConcepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptx
 
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VS
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VSSEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VS
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VS
 
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
 
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docxPLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024
 
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxLA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
 
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfCurso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
 
2024 KIT DE HABILIDADES SOCIOEMOCIONALES.pdf
2024 KIT DE HABILIDADES SOCIOEMOCIONALES.pdf2024 KIT DE HABILIDADES SOCIOEMOCIONALES.pdf
2024 KIT DE HABILIDADES SOCIOEMOCIONALES.pdf
 
Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024
 

Tema 4 - Tipos datos avanzados (III)

  • 1. http://www.eps.uam.es/~phaya PROG-I 2009-10 PUNTEROS Y GESTIÓN DINÁMICA DE MEMORIA Tema 4 – 4.5 N U L L 'P' 'H' 'C' lista
  • 2. PROG-I /18PROG-I Objetivos Semana 6 4.1 Definir macros y tipos de datos en C 4.2 Hacer uso de arrays y estructuras Semana 7 4.3 Tipos de datos definidos por el programador 4.4 Ficheros Semana 8 y 9 4.5 Punteros y gestión dinámica de memoria Curso 2009-10Tema 4 - Tipos de datos 2
  • 4. PROG-I /18PROG-I Problemas arrays  El tamaño del array está prefijado en tiempo de compilación.  Si el número de elementos de entrada es muy variable de una ejecución a otra ¿no se podría reserva memoria en tiempo de ejecución en función de cuantos elementos quiero almacenar. typedef struct { Elemento e[MAX_ELEM] int n; } Vector; Vector v; Curso 2009-10 4Tema 4 - Tipos de datos
  • 5. PROG-I /18PROG-I Reserva memoria dinámica  malloc, calloc: procedimiento que reseva dinámicamente (tiempo de ejecución) memoria para almacenar una variable del tipo puntero.  free: libera la memoria reservada anterioremente.  NULL: valor que representa una dirección de memoria vacía. #include <stdio.h> #include <stdlib.h> int main(void) { int * pa; pa = (int *) malloc(sizeof(int)); *pa = 54; printf("%dn", *pa); /*???*/ free(pa); pa = NULL; return 0; } ee punteros3.c main heap int * pa; papa Curso 2009-10 5Tema 4 - Tipos de datos
  • 6. PROG-I /18PROG-I  malloc, calloc: procedimiento que crea dinámicamente (tiempo de ejecución) memoria para almacenar una variable del tipo puntero.  free: libera la memoria reservada anterioremente.  NULL: valor que representa una dirección de memoria vacía. #include <stdio.h> #include <stdlib.h> int main(void) { int * pa; pa = (int *) malloc(sizeof(int)); *pa = 54; printf("%dn", *pa); /*???*/ free(pa); pa = NULL; return 0; } ee punteros3.c main papa heap ???? pa = (int *) malloc(sizeof(int)); Reserva memoria dinámica Curso 2009-10 6Tema 4 - Tipos de datos
  • 7. PROG-I /18PROG-I  malloc, calloc: procedimiento que crea dinámicamente (tiempo de ejecución) memoria para almacenar una variable del tipo puntero.  free: libera la memoria reservada anterioremente.  NULL: valor que representa una dirección de memoria vacía. #include <stdio.h> #include <stdlib.h> int main(void) { int * pa; pa = (int *) malloc(sizeof(int)); *pa = 54; printf("%dn", *pa); /*???*/ free(pa); pa = NULL; return 0; } ee punteros3.c main heap *pa = 54; papa 5454 Reserva memoria dinámica Curso 2009-10 7Tema 4 - Tipos de datos
  • 8. PROG-I /18PROG-I  malloc, calloc: procedimiento que crea dinámicamente (tiempo de ejecución) memoria para almacenar una variable del tipo puntero.  free: libera la memoria reservada anterioremente.  NULL: valor que representa una dirección de memoria vacía. #include <stdio.h> #include <stdlib.h> int main(void) { int * pa; pa = (int *) malloc(sizeof(int)); *pa = 54; printf("%dn", *pa); /*???*/ free(pa); pa = NULL; return 0; } ee punteros3.c main heap *pa = 54; papa 5454 Reserva memoria dinámica Curso 2009-10 8Tema 4 - Tipos de datos
  • 9. PROG-I /18PROG-I  malloc, calloc: procedimiento que crea dinámicamente (tiempo de ejecución) memoria para almacenar una variable del tipo puntero.  free: libera la memoria reservada anterioremente.  NULL: valor que representa una dirección de memoria vacía. #include <stdio.h> #include <stdlib.h> int main(void) { int * pa; pa = (int *) malloc(sizeof(int)); *pa = 54; printf("%dn", *pa); /*???*/ free(pa); pa = NULL; return 0; } ee punteros3.c main heap *pa = 54; papa ???? Reserva memoria dinámica Curso 2009-10 9Tema 4 - Tipos de datos
  • 10. PROG-I /18PROG-I  malloc, calloc: procedimiento que crea dinámicamente (tiempo de ejecución) memoria para almacenar una variable del tipo puntero.  free: libera la memoria reservada anterioremente.  NULL: valor que representa una dirección de memoria vacía. #include <stdio.h> #include <stdlib.h> int main(void) { int * pa; pa = (int *) malloc(sizeof(int)); *pa = 54; printf("%dn", *pa); /*???*/ free(pa); pa = NULL; return 0; } ee punteros3.c main heap pa = NULL; papa NULLNULL Reserva memoria dinámica Curso 2009-10 10Tema 4 - Tipos de datos
  • 11. PROG-I /18PROG-I Reserva y liberación de memoria  malloc: reserva tanto bytes de memoria como se le indica, y devuelve un puntero. void=tipo genérico void * malloc(size_t tam); int * pa; pa = (int *) malloc(sizeof(int));  free: libera el área de memoria referencia por el puntero. void free(void *ptr); free(pa);  calloc: reserva espacio para un array de nelem elementos de tamaño eltam. Inicializa los elementos del array a cero. void * calloc(size_t nelem, size_t eltam);  realloc: cambia el tamaño del espacio apuntado por ptr al nuevo tamaño tam. void * realloc(void *ptr, size_t tam); Curso 2009-10 11Tema 4 - Tipos de datos
  • 12. PROG-I /18PROG-I Arrays memoria estática vs dinámica Curso 2009-10Tema 4 - Tipos de datos 12 ee punteros3.c main heap v2 = (int *) calloc(dim, sizeof(int)); v1v1 11  Estática:  int v1 []={1,2,3};  Dinámica: int* v2; int dim; scanf("%d", &dim); /* suponemos 3 */ v2 = (int *) calloc(dim, sizeof(int)); /* v2 =(int *) malloc(dim*sizeof(int)); */ … free(v2); /*elimina toda la mem.*/  v2 es un puntero al primer elemento  *v2  v2[0] 22 33 v2v2 00 00 00
  • 13. PROG-I /18PROG-I Arrays memoria estática vs dinámica Curso 2009-10Tema 4 - Tipos de datos 13 ee punteros3.c main heap v1v1 11  Acceso v2[0] = 3; v2[1] = 2; v2[2] = 1; /* equivalante a */ *v2 = 3; *(v2+1) = 2; *(v2+2) = 1; 22 33 v2v2 33 22 11
  • 14. PROG-I /18PROG-I Arrays memoria estática vs dinámica Curso 2009-10Tema 4 - Tipos de datos 14 ee punteros3.c main heap v1v1 11  v1 ≠ v2 =>  v1++; //ILEGAL  v2++; //PELIGROSO *(v2+1) = 7; /* No es equivalante */ v2++; *v2 = 7 22 33 v2v2 33 22 11 v2++;
  • 15. PROG-I /18PROG-I Arrays memoria estática vs dinámica Curso 2009-10Tema 4 - Tipos de datos 15 ee punteros3.c main heap v1v1 11  Puntero auxiliar /* Puntero auxiliar */ int * pt; pt = v2; pt++; *pt = 7; 22 33 v2v2 33 77 11 *pt = 7; ptpt
  • 16. PROG-I /18PROG-I Arrays multidimensionales  double a[FIL][COL];  double *a[FIL];  double **a; a = (double **) malloc(FIL*sizeof(double *)); for (i=0 ; i < FIL; ++i) a[i] = (double *) malloc(COL*sizeof(double)); . . . printf("%f", a[1][1]); a a a for (i=0 ; i < FIL; ++i) a[i] = (double *) malloc(COL*sizeof(double)); . . . printf("%f", a[1][1]); printf("%f", a[1][1]); Curso 2009-10 16Tema 4 - Tipos de datos
  • 17. PROG-I /18PROG-I Arrays de cadenas de caracteres  char *meses[] = { "Mes incorrecto", "Enero", "Febrero", "Marzo" }; /* eq. a char *meses[4]; */ M e s i n c o r r e c t o 0 E n e r o 0 F e b r e r o 0 M a r z o 0 ¿char *meses[4] = char [4][15]? mesesmeses Curso 2009-10 17Tema 4 - Tipos de datos
  • 18. PROG-I /18PROG-I Argumentos de un programa  int main(int argc, char *argv[])  argc: número de argumentos de entrada incluyendo el nombre del programa.  argv: array que contiene los argumentos del programa como cadena de caracteres  argv[0]: nombre del programa #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) /*int main(int argc, char **argv)*/ { float x; if (argc != 2) { printf("Uso: %s numero_realn", argv[0]); exit(1); } x = atof(argv[1]); printf("%s: %.3fn", argv[1], x); return 0; } Curso 2009-10 18Tema 4 - Tipos de datos