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

Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PCCesarFernandez937857
 
UNIDAD DPCC. 2DO. DE SECUNDARIA DEL 2024
UNIDAD DPCC. 2DO. DE  SECUNDARIA DEL 2024UNIDAD DPCC. 2DO. DE  SECUNDARIA DEL 2024
UNIDAD DPCC. 2DO. DE SECUNDARIA DEL 2024AndreRiva2
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfAngélica Soledad Vega Ramírez
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Lourdes Feria
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...JonathanCovena1
 
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxEXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxPryhaSalam
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Carlos Muñoz
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
Manual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfManual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfMaryRotonda1
 
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
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuaDANNYISAACCARVAJALGA
 
Neurociencias para Educadores NE24 Ccesa007.pdf
Neurociencias para Educadores  NE24  Ccesa007.pdfNeurociencias para Educadores  NE24  Ccesa007.pdf
Neurociencias para Educadores NE24 Ccesa007.pdfDemetrio Ccesa Rayme
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMarjorie Burga
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIACarlos Campaña Montenegro
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptELENA GALLARDO PAÚLS
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxAna Fernandez
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoFundación YOD YOD
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxlclcarmen
 

Último (20)

Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PC
 
UNIDAD DPCC. 2DO. DE SECUNDARIA DEL 2024
UNIDAD DPCC. 2DO. DE  SECUNDARIA DEL 2024UNIDAD DPCC. 2DO. DE  SECUNDARIA DEL 2024
UNIDAD DPCC. 2DO. DE SECUNDARIA DEL 2024
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...
 
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxEXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
 
Manual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfManual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .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
 
Presentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza MultigradoPresentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza Multigrado
 
Power Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptxPower Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptx
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahua
 
Neurociencias para Educadores NE24 Ccesa007.pdf
Neurociencias para Educadores  NE24  Ccesa007.pdfNeurociencias para Educadores  NE24  Ccesa007.pdf
Neurociencias para Educadores NE24 Ccesa007.pdf
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grande
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docx
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativo
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
 

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