Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO...

50
19/02/2013 1 TEMA: Introducción a la programación C FECHA: Febrero de 2013 Profesor: Miguel Hernando Gutiérrez Bibliografía recomendada Introducción a la Programación en C. Apuntes de la asignatura 1 TEMA: Introducción a la programación C FECHA: Febrero de 2013 Profesor: Miguel Hernando Gutiérrez Clase 2.1 La función main: Hola Mundo CODIGO FUENTE Archivo de texto *.c PREPROCESADOR ARCHIVOS DE CABECERA Archivo de texto *.h #include <stdio.h> void main() { printf("Hola mundo\n"); } ENLAZADOR (LINKADO) COMPILADOR CODIGO FUENTE PREPROCESADO CODIGO COMPILADO Archivo binario *.obj LIBRERIAS ESTATICAS Archivo binario *.lib 2 (LINKADO) EJECUTABLE Archivo binario *.exe EJECUCION LIBRERIAS DINAMICAS Archivo binario *.dll PROGRAMA EJECUTANDOSE

Transcript of Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO...

Page 1: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

1

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Bibliografía recomendada

Introducción a la Programación en C. Apuntes de la asignatura

1

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Clase

2.1 La función main: Hola Mundo

CODIGO FUENTE Archivo de texto *.c

PREPROCESADOR

ARCHIVOS DE CABECERA Archivo de texto *.h

#include <stdio.h>

void main() {

printf("Hola mundo\n"); } ENLAZADOR

(LINKADO)

COMPILADOR

CODIGO FUENTE PREPROCESADO

CODIGO COMPILADOArchivo binario *.obj

LIBRERIAS ESTATICAS Archivo binario *.lib

2

(LINKADO)

EJECUTABLE Archivo binario *.exe

EJECUCION

LIBRERIAS DINAMICAS Archivo binario *.dll

PROGRAMA EJECUTANDOSE

Page 2: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

2

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Ejercicio

Cuáles son los errores?

void main(){

Printf( "Hola mundo/n ); }

• No hay ninguna biblioteca incluida.

• No tiene definida la función Printf

• Printf en lugar de printf

• /n en lugar de \n

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Elementos de C

•Los separadores (espacio en blanco y comentarios).

• Las palabras clave. (el lenguaje en si)

• Los identificadores (los nombres de las cosas)

• Las constantes (valores fijos: 5, 8.3, “hola” )

•Los operadores

#include <stdio.h>

void main() {

int variable=0;variable=5+34; printf("Hola mundo\n");

}

Page 3: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

3

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Clase

2.2 Comentarios//Comentario en C++/*Comentario en C*// Comentario en C /

Hacer un programa que imprima en pantalla las frases:

Mi nombre es:

Espacio en blanco en CEspacio, saltos de línea, tabuladores, etc… son ignorados por el compilador.

5

Mi nombre es:

Estoy aprendiendo a programar en C.

Incluya un comentario con los siguientes datos:

Fecha:

Programador:

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Clase

2.3 Identificadores y palabras reservadas•En C hay 32 palabras clave reservadas •El editor las colorea en azul.El editor las colorea en azul.

Modificadores Tipos datos primitivos

Tipos datos avanzados

Control

unsigned void struct ifsigned char enum elseauto short typedef switchregister int union caseextern long default

6

const float forstatic double dovolatile while

sizeof returncontinuebreakgoto

Page 4: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

4

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Clase

2.4 Variables y constantes

Identificadores sirven para variables y funcionesIdentificadores sirven para variables y funciones[modificador] <tipo> <identificador> [=valor inicial];

Ejemplos:float dato;int numero;const int c=4;

7

int a=3;

En C siempre al principio de una función

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Clase

2.4 Variables y constantes

Sobre Windows:Sobre Windows:

Modificador Tipo Tamaño Rango

(signed) char 1 byte -128 a 127

unsigned char 1 byte 0 a 255

short 2 bytes -32768 a 32767

unsigned short 2 bytes 0 a 65535

8

int 4 bytes -2147483648 a 2147483647

unsigned int 4 bytes 0 a 4294967295

long 4 bytes -2147483648 a 2147483647

unsigned long 4 bytes 0 a 4294967295

float 4 bytes 1.7 e+38 (precisión 7)

double 8 bytes 1.7e+308 (precisión 16)

Page 5: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

5

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Clase

2.4 Variables y constantes

Identificadores:Identificadores: • “Nombre simbólico que se refiere

a un dato o a una parte de un programa”

• Asignar nombres a direcciones de memoria: variables y funciones

• Ej: char peso;

0110010135 peso

9

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Clase

2.4 Variables y constantes

Identificadores: • Reglas sintaxis:

1. a-z, A-Z, 0-9, ‘_’2. No espacios ni signos de puntuacion3. Primer carácter distinto de 0-94. Distingue mayusculas de minusculas (Masa ≠ masa ≠ MASA ≠

MaSa …)5. Maximo 31 caracteres de longitud (ANSI C)6 N l b l (Ej t)

10

6. No palabras clave (Ej. const)• Reglas “Buen uso”:

1. Utilizar nombres significativos. (Ej. edad vs. e)2. Utilizar variables tipicas en matematicas. (Ej. i,j,k para indices)3. Comenzar las variables por minuscula.

Page 6: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

6

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Clase

2.4 Variables y constantes

Identificadores: Ejemplos NO1valor

2_dato

tiempo-total

dólar

Ejemplos SIUnValor

dato2

tiempo_total

dolar

11

continue

%final

mi variable

Dolares$

continuar

porcentaje_final

mi_variable

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Clase

2.4 Variables y constantes

Identificadores: PeorDato

MiEdad

contador

Mejoredad, peso, longitud

miEdad, mi_edad

i

12

Page 7: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

7

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Clase

2.4 Variables y constantes

Constantes:Datos que no pueden variar en el programa

1. Numéricos 5, 224, 2.23, 5e-32. Caracteres ‘a’, ‘y’3. Cadenas de caracteres “Hola mundo”

13

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Clase

2.4 Variables y constantes

Variables y memoria

14

Page 8: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

8

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Clase

2.4 Variables y constantes

Declaración de las variables

15

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Clase

2.4 Variables y constantes

16

Variable Global

#include <stdio.h> int x;

int main() {

}

Variable Local

#include <stdio.h>

int main() {

int x; }

Page 9: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

9

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Clase

2.4 Variables y constantes

17

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Clase

2.4 Variables y constantes

#include <stdio.h>

int main() {

int x = 10;

printf( "El valor inicial de x es %d\n", x );

x = 50;

printf( "Ahora el valor es %d\n" x );

18

printf( Ahora el valor es %d\n , x );return 0;

}

Page 10: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

10

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Clase

2.5 Expresiones, sentencias y directivas: el uso de llavesSentencia simple ;Sentencia Compuesta { }Sentencia Compuesta { }Directiva #Una expresión es una combinación de variables constantes y/o operadores. Todas las expresiones tienen valor en C.

La directiva #define para constantes de texto#include <stdio.h>

#define CAJAS 4

#define UNIDADES_POR_CAJA 25

19

_ _

#define PRECIO_POR_UNIDAD 100

#define IMPUESTOS 1.16

int main() {

int precio;

precio = (CAJAS*UNIDADES_POR_CAJA*PRECIO_POR_UNIDAD)*(IMPUESTOS);

printf( "El precio total es: %d", precio );

return 0;

}

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Clase

2.6 Escritura y lectura con printf y scanf

printf

Esta definida en el fichero stdio.hSirve para mostrar texto por la consola.

printf(<cadena de car>[, par1,par2…]);Se sustituye en la cadena de caracteres, las ocurrencias

de %

%[ancho][precision] tipo

p

Secuencias de escape Si entre “ “ ponemos:

20

%[ ][p ] p%c – carácter%d – entero con signo%i – entero con signo%u – entero sin signo%e – exponencial %f – real%s – cadena de caracteres

Secuencias de escape. Si entre ponemos:\n – retorno de carro\t – tabulacion\b – retrocede un carácter\’ – Comilla simple\” – Comilla doble\\ - Barra invertida

Page 11: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

11

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Clase

2.6 Escritura y lectura con printf y scanf

scanfEsta definida en el fichero stdio.hPermite capturar la entrada del usuario.

scanf(<cadena de formato>,[ &var1, & var2]);

La especificacion de formato es igual a la del printf. Recordar: Solo entrada del usuario

21

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Clase

2.7 Los operadoresAritméticos: +,-,*,/,%. Precaución con la división entera o real.Precaución con la división entera o real.Asignaciones compuestas: ++,--,+=,-=,/=,%=,*=#include <stdio.h>

int main() { int a = 2; int b = 3; int c; c = a + b;

printf ( "Resultado = %d\n" c

#include <stdio.h>

int main() {

int x = 5; printf ( "Valor de x = %d\n", x );

x++; printf ( "Valor de x = %d\n" x );

22

printf ( Resultado = %d\n , c );

return 0;}

printf ( Valor de x = %d\n , x ); return 0;

}

Page 12: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

12

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Clase

2.7 Los operadoresComparación: ==, !=, >, <, >=, <=Lógicos: &&, ||, !Lógicos: &&, ||, !Bitwise: |,&,^,~,>>,<<

#include <stdio.h>

int main() { printf( "El resultado de la operación 235 | 143 es: %d\n", 235 | 143 ); return 0;

}

23

}

El resultado de la operación 235 | 143 es: 239

235 11101011

143 10001111

239 11101111

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Clase

2.8 Precedencia y asociatividad de operadores() [] . () [] . -->>

-- ~ ! ++ ~ ! ++ ---- (tipo) * & sizeof(tipo) * & sizeof

* / %* / %

+ + --

<< >><< >>

< <= > >=< <= > >=

== !=== !=

&&

24

&&

||

&&&&||||?:?:= *= /= %= += = *= /= %= += --= <<= >>= &= |= ^== <<= >>= &= |= ^=

Page 13: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

13

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Clase

2.8 Precedencia y asociatividad de operadores#include <stdio.h> #include <stdio.h>

int main() {

int a, b, c;

a = 5;

b = ++a;

c = ( a + 5 * 2 ) * ( b + 6 / 2 ) + ( a * 2 );

printf( "%d, %d, %d", a, b, c );

}

int main() {

float x = 0, a = 20, b = 10, d = 4;

x = (a - b);--b;x *= (b - d) * b / (b - d);b++;b++;printf("x = %f, b = %f\n", x, b);return 0;

25

#include <stdio.h>

int main() {

int a, c;

a = 5;

c += a +5;

}

}return 0;}

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Clase

2.9 CastingCuando dos tipos diferentes de constantes y/o variables aparecen en una misma expresión relacionadas por un operador, el compilador convierte los p p p pdos operandos al mismo tipo de acuerdo con los rangos, que de mayor a menor se ordenan del siguiente modo:

long double > double > float > unsigned long > long > unsigned int > int > char

Hay otra conversión implicita en las asignaciones

El casting es indicar una conversión de forma explícita:

26

g pPara ello basta preceder la constante, variable o expresión que se desea convertirpor el tipo al que se desea convertir, encerrado entre paréntesis.

k = (int) 1.7 + (int) masa;

Page 14: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

14

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Tema 3. Las sentencias de control3.1. If-else3.2. Switch3.3. While3 4 F3.4. For3.5. Do-while3.6. Bucles anidados3.7. Break y continue

27

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Las sentencias de controlClasificación funcional de las sentencias de control

28

Page 15: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

15

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Las sentencias de control

3.1 SENTENCIA if else

29

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Las sentencias de control

3.1 SENTENCIA if else

30

Page 16: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

16

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Las sentencias de control

3.1 SENTENCIA if else

31

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Las sentencias de control

3.1 SENTENCIA if else

32

Page 17: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

17

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Las sentencias de control

3.1 ANIDAMIENTO DE SENTENCIAS if else

33

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Las sentencias de control

3.1 ANIDAMIENTO DE SENTENCIAS if else

34

Page 18: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

18

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Las sentencias de control

3.1 Construcción else if

35

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Las sentencias de control

3.1 Construcción else if

36

Page 19: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

19

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Las sentencias de control

3.2 SENTENCIA switch case

37

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Las sentencias de control

3.2 SENTENCIA switch case

38

Page 20: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

20

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Las sentencias de control

3.2 SENTENCIA switch case

39

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Las sentencias de control

3.2 SENTENCIA break en switch case

40

Page 21: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

21

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Las sentencias de control

3.3 BUCLE while

41

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Las sentencias de control

3.3 BUCLE while

42

Page 22: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

22

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Las sentencias de control

3.4 BUCLE for

43

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Las sentencias de control

3.4 BUCLE for

44

Page 23: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

23

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Las sentencias de control

3.5 BUCLE do while

45

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Las sentencias de control

3.5 BUCLE do while

46

Page 24: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

24

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Las sentencias de control

3.6 BUCLES anidados

47

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Las sentencias de control

3.7 BREAK y CONTINUE

48

Page 25: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

25

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Las sentencias de control

3.7 BREAK y CONTINUE

49

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Tema 4. Tipos avanzados de datos4.1. Vectores4.2. Cadenas de caracteres4.3. Estructuras4 4 V t d t t4.4 Vectores de estructuras4.5 Matrices

50

Page 26: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

26

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

4.1 Vectores

Concepto

Declaración de un vector en C

51

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

4.1 Vectores

Elementos de un vector

52

Page 27: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

27

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

4.1 VectoresEjemplos:

53

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

4.1 VectoresInicialización de un vector:

54

Page 28: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

28

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

4.1 VectoresRecorrido de un vector:

55

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

4.1 VectoresEjemplo: leer un vector desde el teclado e imprimirlo en la pantalla

56

Page 29: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

29

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

4.2 Cadenas de caracteresConcepto de cadena de caracteres en C

Declaración de una cadena de caracteres

57

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

4.2 Cadenas de caracteresElementos de una Cadena

58

Page 30: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

30

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

4.2 Cadenas de caracteresInicialización de una Cadena

59

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

4.2 Cadenas de caracteresRecorrido por los elementos de una cadena

60

Page 31: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

31

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

4.2 Cadenas de caracteresEjemplo: imprimir una cadena en la pantalla carácter a carácter.

61

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

4.2 Cadenas de caracteresImprimir una cadena de caracteres con printf.

62

Page 32: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

32

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

4.2 Cadenas de caracteresLeer una cadena de caracteres con scanf.

63

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

4.2 Cadenas de caracteresLeer una cadena de caracteres con espacios en blanco: gets().

64

Page 33: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

33

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

4.3 EstructurasConcepto de estructura en C

65

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

4.3 EstructurasConcepto de estructura en C

66

Page 34: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

34

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

4.3 EstructurasPatrón de una estructura

67

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

4.3 EstructurasDeclaración de variables

68

Page 35: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

35

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

4.3 EstructurasDefinición de un nuevo tipo de datos

69

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

4.3 EstructurasAcceso a miembros de una estructura

Operaciones con variables estructura

70

Page 36: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

36

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

4.3 EstructurasEjemplo: Acceso a miembros de una estructura

71

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

4.4 Vectores de estructurasVectores de estructuras

-A efectos prácticos las estructuras son como un tipo de datos básico, solo que admite el uso del operador ‘.’, q p

typedef struct{char nombre[50]int matricula;

}ficha;void main{

ficha clase[50];int i;

72

;for(i=0;i<50;i++){

scanf(“%s”, clase[i].nombre);scanf(“%d”, &(clase[i].matricula)

}for(i=0;i<50;i++)printf(“\n%s:%d”,clase[i].nombre, clase[i].matricula);

}

Page 37: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

37

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

4.5 MatricesEn C no hay matrices, sino vectores de vectores

void main{

int m[10][5]; //vector de 10 grupos de 5 enterosint i,j;for(i=0;i<10;i++){

for(j=0;j<5;j++)scanf(“%d”, &(m[i][j]));

}for(i=0;i<10;i++)printf(“\n%d”, m[i][j%5]);

}

73

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Tema 5. Punteros5.1. Punteros, definición y operadores5.2. Operaciones con punteros5.3. Punteros a tipos de datos avanzados5 4 A i ió di á i d i5.4 Asignación dinámica de memoria

74

Page 38: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

38

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Punteros

1. El concepto de punteros en CEn memoria solo hay bits organizados en conjuntos.

Una variable indica como hay que leer ese conjunto de bits, para interpretarlos correctamente:

1011 0011

0010 1101

1100 0000

0000 1110int a

75

0000 1110

1010 1001

1101 1100

0010 1010

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Punteros

1. El concepto de punteros en CPara poder entender todo lo que hay en la memoria hay que saber dos cosas: donde está un dato, y como hay que leerlo.y y q

La variable a está desde el byte 128 hasta el byte 131.Hay que interpretarlo como un entero de 4 bytes.

… 1011 0011

128 0010 1101

129 1100 0000

130 0000 1110int a

76

130 0000 1110

131 1010 1001

132 1101 1100

… 0010 1010char c

Toda variable está en algún lugar (dirección) y ocupa un número de bytes (tamaño).

Page 39: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

39

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Punteros

1. El concepto de punteros en C•En C tenemos el operador & que nos dice la dirección en la que está una variable (la de comienzo).( )

El valor de &a será 129•y tenemos un operador sizeof que nos dice cuanto ocupa un tipo de variable.

El valor de sizeof(int) será 4

… 1011 0011

128 0010 1101

77

129 1100 0000

130 0000 1110

131 1010 1001

132 1101 1100

… 0010 1010

int a

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Punteros

1. El concepto de punteros en CDefinición: un puntero es una variable que contiene la dirección de otra variable así como el tipo con el que dicha dirección es interpretada.p q p

Por tanto un puntero también se almacena en memoria (es un numero) y también podemos pedir la dirección en donde está.

… 1011 0011

128 0010 1101

129 1100 0000

130 0000 1110int a

… 1011 0011

221 0010 1101

222 1000 0000

78

130 0000 1110

131 1010 1001

132 1101 1100

… 0010 1010

223 0000 0000

224 0000 0000

225 0000 0000

… 0010 1010

int *p

int *p = &a;

Page 40: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

40

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Punteros

1. El concepto de punteros en CLas variables puntero son un tipo de datos derivado de otro básico:

<tipo> *identificador, *identificador,…;

char *pa, *pb, *pc; //crea tres punteros a charchar *pa, pb, pc; //crea un puntero a char y dos char;

79

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Punteros

2. Operaciones con punteros

El operador unario * (indirección) aplicado a un puntero accede alEl operador unario (indirección) aplicado a un puntero accede al contenido en memoria y lo interpreta según el tipo basico del puntero.

80

Si p es un puntero, entonces *p es el valor de la variable a la que apunta

Page 41: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

41

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Punteros

2. Operaciones con punteros

El operador unario * (indirección) aplicado a un puntero accede alEl operador unario (indirección) aplicado a un puntero accede al contenido en memoria y lo interpreta según el tipo basico del puntero.

81

Si p es un puntero, entonces *p es el valor de la variable a la que apunta

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Punteros

2. Operaciones con punteros

Relación entre punteros y vectores:p ySea un vector:

int vector[10];

El nombre de un vector es un puntero constante que apunta al primer elemento del vector.

int *p;p=a; //es lo mismo que escribir a=&(a[0]);

82

vector al ser declarado, apunta a una zona de memoria donde tiene reservado espacio para 10*sizeof(int) bytes (40 bytes)

A un puntero se le puede aplicar el operador [ ] con el mismo efecto que con un vector.

Page 42: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

42

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Punteros

2. Operaciones con punteros

Sumar un entero a un puntero:p<puntero>+<int>= dirección + <int>sizeof(tipo del puntero)

Sumar 1 a un puntero es acceder al siguiente elemento del mismo tipo que hay a continuación en la memoria.

int *p;int vector[10];p=a; //es lo mismo que escribir a=&(a[0]);p+1; //es lo mismo que escribir &(a[1]);

4 // l i ibi ( [4])

83

p+4; //es lo mismo que escribir &(a[4]);*(p+4)=10; //es lo mismo que a[4]=10; !!!!

Hacer <puntero>[int] equivale a *(<puntero>+<int>).

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Punteros

2. Operaciones con punteros

Sumar un entero a un puntero:p<puntero>+<int>= dirección + <int>sizeof(tipo del puntero)

Sumar 1 a un puntero es acceder al siguiente elemento del mismo tipo que hay a continuación en la memoria.

int *p;int vector[10];p=a; //es lo mismo que escribir a=&(a[0]);p+1; //es lo mismo que escribir &(a[1]);

4 // l i ibi ( [4])

84

p+4; //es lo mismo que escribir &(a[4]);*(p+4)=10; //es lo mismo que a[4]=10; !!!!

Hacer <puntero>[int] equivale a *(<puntero>+<int>).

Restar 1 a un puntero es acceder al elemento anterior del mismo tipo que hay en la memoria

Page 43: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

43

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Punteros

2. Operaciones con punteros

Restar un entero a un puntero:p<puntero>-<int>= dirección - <int>sizeof(tipo del puntero)

Restar 1 a un puntero es acceder al elemento anterior del mismo tipo que hay precedente en la memoria.

int *p;int vector[10];p=&(a[5]); p-1; //es lo mismo que escribir &(a[4]);

// itú ( [6])

85

p++; //sitúa p en &(a[6]);*(p-4)=10; //es lo mismo que p[2]=10;

Restar dos punteros del mismo tipo da lugar a un entero igual al numero de elementos que caben entre ambos punteros:

<puntero1> - <puntero2> == (direccion1-direccion2)/sizeof(tipo)

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Punteros

2. Operaciones con punteros

86

Page 44: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

44

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

#include <stdio.h>#include <conio.h>

void main(){

int a;int *p1, *p2;

p1 = &a;p2 = p1;

printf("%p %p",p1,p2);

getch();getch();}

0012FF60 0012FF60

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

#include <stdio.h>#include <conio.h>

int main(){{

int a;int *b;

a = 10;b = &a;*b += 5;printf( "El valor de a es = %d\n", a );getch();g ();return 0;

}

El valor de a es 15

Page 45: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

45

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

#include <stdio.h>

int main()

{

Detectar el error:

{

int *a;

*a = 5;

}

Porque no hemos asignado ninguna dirección al puntero. Este puntero puedeq g g p p papuntar a cualquier sitio y al darle un valor estamos escribiendo en un lugar desconocido de la memoria.

Esto puede dar problemas e incluso bloquear el ordenador. Recordemos que al ejecutar un programa éste se copia en la memoria, al escribir en cualquier parte puede que estemos cambiando el programa (en la memoria, no en el disco duro). .

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

#include “stdio.h”

void main(void){

int a, b, c;, , ;int *p1, *p2;void *p;

p1 = &a; // Paso 1. La dirección de a es asignada a p1*p1 = 1; // Paso 2. p1 (a) es igual a 1. Equivale a a = 1p2 = &b; // Paso 3. La dirección de b es asignada a p2*p2 = 2; // Paso 4. p2 (b) es igual a 2. Equivale a b = 2;p1 = p2; // Paso 5. El valor del p1 = p2*p1 = 0; // Paso 6. b = 0p2 = &c; // Paso 7. La dirección de c es asignada a p2*p2 = 3; // Paso 8. c = 3printf("%d %d %d\n", a, b, c); // Paso 9p = &p2; // Paso 10. p contiene la dirección de p1*p2 = 1; // Paso 12. c = 1printf("%d %d %d\n", a, b, c); // Paso 13.

}

1 0 3

1 0 1

Page 46: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

46

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Punteros

3. Punteros a tipos de datos avanzados

Punteros y matricesy

int mat[5][3], **p, *q;

El nombre de la matriz es un puntero al primer elemento de un vector de punteros a bloques de 3 enteros mat

El nombre mat es pues un puntero a puntero. Sin embargomat != &(mat[0][0])

a pesar de apuntar al mismo lugar, porque el tipo del puntero es distinto

91

El nombre mat[1] es pues un puntero a un entero (al primer entero del segundo vector de la matriz). Es decir mat[1] == &(mat[1][0])

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

Punteros

3. Punteros a tipos de datos avanzados

Punteros y matricesyHaciendo

int **p = mat; se tendrán las siguientes formas de acceder a los elementos de la matriz:

*p = mat[0]

**p = mat[0][0]

*(p+1) = mat[1]

92

(p ) [ ]

**(p+1) = mat[1][0]

*(*(p+1)+1) = mat[1][1]

Page 47: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

47

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

PunterosAsignación dinámica de memoria

• Cuando definimos un vector con un tamaño definido, podemos tener dosposibles casos, uno es un desaprovechamiento de la memoria y otro es lafalta de espacio.

• Dada la equivalencia entre vectores y punteros podría interesar poderdefinir:

int *x;Y luego decidir cuanto elementos guardaremos en lugar de tener queponer una constante en el vector:poner una constante en el vector:

int x[10];

• Sobre todo si no conocemos el tamaño de manera predeterminada.

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

PunterosAsignación dinámica de memoria

• Durante la ejecución se puede solicitar un espacio de memoria por mediode la función malloc (stdlib.h).int *x;x= (int *)malloc(10*sizeof(int));

• En este caso solicitamos espacio para almacenar 10 veces lo que ocupa unentero.

• En general el <<cast>> de tipo que procede a malloc debe ser consistenteEn general el <<cast>> de tipo que procede a malloc debe ser consistentecon el tipo de datos de la variable puntero.

• Así si quisiéramos pedir en tiempo de ejecución para diez variables tipodouble sería:

y=(double *)malloc(10*sizeof(double));

Page 48: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

48

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

PunterosAsignación dinámica de memoria: ejemplo

int i,n,*x;int i,n, x;….printf(“¿Cuántos números serán introducidos?\”);scanf(“%d”,&n);/* reserva de memoria para n enteros */x=(int *)malloc(n*sizeof(int));

for(i=0;i<n;i++){i tf( “i %d “ i 1)printf( “i=%d x=“, i+1);

scanf(“%d”,x+i);}

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

PunterosAsignación dinámica de memoria

La función malloc (Memory allocate) reserva una parte de la memoria y devuelve la dirección del comienzo de esa parte. Esta dirección se almacena en un puntero y así podemos acceder a la memoria reservada.

Si fracasa, retornará NULL. Por ejemplo porque no hay memoria suficiente.

El cast es necesario por la generalidad de malloc. Esta función retorna un d l h l i ió i h l

puntero = (tipo_de_variable *) malloc( cantidad de bytes a reservar );

puntero a nada, por lo que para hacer la asignación es necesario hacer la conversión explícita.

Cuando ya no necesitemos más el espacio reservado debemos liberarlo. Si no liberamos el espacio que ya no necesitamos corremos el peligro de agotar la memoria del ordenador. Para ello usamos la función free, que funciona de la siguiente manera:

Page 49: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

49

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

PunterosLiberación de memoria

Cuando ya no necesitemos más el espacio reservado debemos liberarlo. Si no liberamos el espacio que ya no necesitamos corremos el peligro de agotar la memoria del ordenador. Para ello usamos la función free, que funciona de la siguiente manera:

IMPORTANTE: da error si el puntero apunta a una zona ya liberada o no reservada con malloc. El ordenador ya sabe cuanto tiene que liberar en

free( puntero );

reservada con malloc. l ordenador ya sabe cuanto tiene que liberar enese bloque.

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

#include <stdio.h>

#include “malloc.h”

void main() {

int b;

char *texto;

printf("Cuantos bytes quieres reservar: ");

scanf("%d",&b);

texto = (char *) malloc(b);

/* Comprobamos si ha tenido éxito la operación */

if (texto != NULL) {

i tf("M i d %i b t \ " b t )printf("Memoria reservada: %i bytes\n", bytes);

printf("El bloque comienza en la dirección: %p\n", texto);

/* Ahora liberamos la memoria */

free( texto );

} else

printf("No se ha podido reservar memoria\n"); }

Page 50: Miguel Hernando Gutiérrez Clase - UPMClase 2.4 Variables y constantes Identificadores: Ejemplos NO 1valor 2_dato tiempo-total dólar Ejemplos SI UnValor dato2 tiempo_total dolar 11

19/02/2013

50

TEMA: Introducción a la programación CFECHA: Febrero de 2013Profesor: Miguel Hernando Gutiérrez

#include "stdio.h"#include “stdlib.h"#include "conio.h"

void main(){{

int *ip, i;

ip = (int *) malloc(5 * sizeof(int) );

printf(“introduzca elementos\n");

for (i=0; i<5; i++)for (i 0; i<5; i++) scanf("%d",(ip+i));

printf(“%d”,ip[4]);free(ip);getch();

}