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

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
FRESH221 C.R
 
Ejemplos Para Dev C++
Ejemplos Para Dev C++Ejemplos Para Dev C++
Ejemplos Para Dev C++
cemayoral
 
Ejercicios sencillos en c
Ejercicios sencillos en cEjercicios sencillos en c
Ejercicios sencillos en c
Alma Navarro
 

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)

Memoria dinamica
Memoria dinamicaMemoria dinamica
Memoria dinamica
gusolis93
 
Curso C Ii
Curso C IiCurso C Ii
Curso C Ii
yuli
 
Nucleo 2 estructuras dinámicas
Nucleo 2 estructuras dinámicasNucleo 2 estructuras dinámicas
Nucleo 2 estructuras dinámicas
carsanta
 
Algoritmos - Funciones C++
Algoritmos - Funciones C++ Algoritmos - Funciones C++
Algoritmos - Funciones C++
Ronal Palomino
 
ED 01 tipos_datos_ejercicios
ED 01 tipos_datos_ejerciciosED 01 tipos_datos_ejercicios
ED 01 tipos_datos_ejercicios
A J
 

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 (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

PLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxPLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docx
lupitavic
 
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfNUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
UPTAIDELTACHIRA
 
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
RigoTito
 

Último (20)

PLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxPLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docx
 
Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024
 
Sesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronósticoSesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronóstico
 
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdfFeliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
 
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
 
Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativa
 
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
 
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
 
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
 
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
 
2024 KIT DE HABILIDADES SOCIOEMOCIONALES.pdf
2024 KIT DE HABILIDADES SOCIOEMOCIONALES.pdf2024 KIT DE HABILIDADES SOCIOEMOCIONALES.pdf
2024 KIT DE HABILIDADES SOCIOEMOCIONALES.pdf
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literario
 
Supuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docxSupuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docx
 
Tema 11. Dinámica de la hidrosfera 2024
Tema 11.  Dinámica de la hidrosfera 2024Tema 11.  Dinámica de la hidrosfera 2024
Tema 11. Dinámica de la hidrosfera 2024
 
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfNUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
 
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
 
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
 
Abril 2024 - Maestra Jardinera Ediba.pdf
Abril 2024 -  Maestra Jardinera Ediba.pdfAbril 2024 -  Maestra Jardinera Ediba.pdf
Abril 2024 - Maestra Jardinera Ediba.pdf
 

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