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
 
Programación en c++
Programación en c++Programación en c++
Programación en c++
 
Cplus
CplusCplus
Cplus
 
C++
C++C++
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

RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACIONRESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
amelia poma
 

Último (20)

LA JUNGLA DE COLORES.pptx Cuento de animales
LA JUNGLA DE COLORES.pptx  Cuento de animalesLA JUNGLA DE COLORES.pptx  Cuento de animales
LA JUNGLA DE COLORES.pptx Cuento de animales
 
Interpretación de cortes geológicos 2024
Interpretación de cortes geológicos 2024Interpretación de cortes geológicos 2024
Interpretación de cortes geológicos 2024
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
 
Los avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtualesLos avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtuales
 
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
 
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLAACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
 
animalesdelaproincia de beunos aires.pdf
animalesdelaproincia de beunos aires.pdfanimalesdelaproincia de beunos aires.pdf
animalesdelaproincia de beunos aires.pdf
 
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACIONRESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
 
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptxCONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
 
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptPINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
 
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
 
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
 
Educacion Basada en Evidencias SM5 Ccesa007.pdf
Educacion Basada en Evidencias  SM5  Ccesa007.pdfEducacion Basada en Evidencias  SM5  Ccesa007.pdf
Educacion Basada en Evidencias SM5 Ccesa007.pdf
 
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIASISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
 
Factores que intervienen en la Administración por Valores.pdf
Factores que intervienen en la Administración por Valores.pdfFactores que intervienen en la Administración por Valores.pdf
Factores que intervienen en la Administración por Valores.pdf
 
Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024
 
Código Civil de la República Bolivariana de Venezuela
Código Civil de la República Bolivariana de VenezuelaCódigo Civil de la República Bolivariana de Venezuela
Código Civil de la República Bolivariana de Venezuela
 
Louis Jean François Lagrenée. Erotismo y sensualidad. El erotismo en la Hist...
Louis Jean François Lagrenée.  Erotismo y sensualidad. El erotismo en la Hist...Louis Jean François Lagrenée.  Erotismo y sensualidad. El erotismo en la Hist...
Louis Jean François Lagrenée. Erotismo y sensualidad. El erotismo en la Hist...
 
Ensayo Paes competencia matematicas 2 Preuniversitario
Ensayo Paes competencia matematicas 2 PreuniversitarioEnsayo Paes competencia matematicas 2 Preuniversitario
Ensayo Paes competencia matematicas 2 Preuniversitario
 
Supuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docxSupuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docx
 

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