23
APUNTADORES EN C

APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando

Embed Size (px)

Citation preview

Page 1: APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando

APUNTADORES EN C

Page 2: APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando

MENU DEL DIA• Repaso clase anterior• Apuntadores. Eso pa que?• Solución al problema:

Funciones.• Ventajas de trabajar un

programa usando funciones.• Introducción a las funciones 1.• Conceptos previos.• Introducción a las funciones 2.• Estructura de una funcion.• Definicion de una funcion.• Invocacion de funciones.

Page 3: APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando

REPASO CLASE ANTERIOR• Ámbito:

• Global.• Local (Bloque).

• Ocultamiento de variables.

Caja negra

#include <stdio.h>#include <stdlib.h>

int a, b = 1, c = 2;

int main() { int d = 3, e = 3; { int f = 8; int g = 9; }

return 0;}

Ámbito global

Ámbito local

Bloq

ue 1

Bloq

ue 2

#include <stdio.h>#include <stdlib.h>

int a=1;

int main() { int a = 3; { int a = 5;

} return 0;}

Bloq

ue 1

Bloq

ue 2

Variable global a = 1.

Ocultamiento de la variable a, global

por la variable local al bloque del main.

a = 3.

Ocultamiento de la variable a, local a la función main por la

variable local al bloque definido al interior del

main. a = 5.

Page 4: APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando

REPASO CLASE ANTERIOR

#include <archivo_cabecera>

declaracion_variables_globales;

int main() { declaracion_variables_locales; instruccion_1; instruccion_2; . . . instruccion_N; return 0;}

#include <archivo_cabecera>

protipo_funciones;declaracion_variables_globales;

int main() { declaracion_variables_locales; funcion_1(); funcion_2(); . . . funcion_N(); return 0;}

funcion_1() { codigo_funcion_1;}. . .funcion_N() { codigo_funcion_N;}

Page 5: APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando

REPASO CLASE ANTERIOR

. . .Caja

negra

in_1

in_N

out_1

In_2

Función:• Nombre. (Con el cual es invocada).• Entradas . (Parámetros de la función). • Salida. (Valor de retorno si tiene).

capitan_planeta(agua, tierra, aire, fuego, corazon);

Por sus poderes reunidos yo soy,…EL CAPITAN PLANETA

Page 6: APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando

REPASO CLASE ANTERIOR

. . .Caja

negra

in_1

in_N

out_1In_2

tipo_retorno nombre_funcion(tipo_1,. . ., tipo_N);

tipo_retorno nombre_funcion(tipo_1 param_1,. . ., tipo_N param_N) { intruccion_1; . . . instrucción_N; return expresion; }

Declaración de la función (Prototipo).

Definición de la función

Page 7: APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando

REPASO CLASE ANTERIOR

#include <archivo_cabecera>

protipo_funciones;declaracion_variables_globales;

int main() { declaracion_variables_locales; funcion_1(); funcion_2(); . . . funcion_N(); return 0;}

funcion_1() { codigo_funcion_1;}. . .funcion_N() { codigo_funcion_N;}

#include <archivo_cabecera>

float suma(float,float);

int main() { . . . float a= suma(2.3,4.1); . . . return 0;}

float suma(float num1, float num2) { float res; res = num1 + num2; return res;}

Page 8: APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando

LOS APUNTADORES, Y ESO PA QUE? (1)

char doc[1000][80];

• Características (Color, autocompletar, etc.).• Estructura de datos (Como se almacena la información en memoria).

• 1000 líneas.• 80 car/linea.

80000 caracteres.

• Que el documento tenga mas de 1000 líneas.• Que el numero de caracteres de una línea sea mayor de 80.

PROBLEMAS

Page 9: APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando

LOS APUNTADORES, Y ESO PA QUE? (2)

(+) Estructura de datos (Que sea posible abrir simultáneamente hasta 10 archivos).

(+)

char doc[50000][1000][10];• 50000 líneas.• 1000 car / línea.• 10 archivos

500000000caracteres.

Page 10: APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando

LOS APUNTADORES, Y ESO PA QUE? (2)

• Gasto extravagante de memoria, pues esta se reserva en tiempo de compilación, y dicha reserva se hace tomando el peor de los casos.• Problemas en equipos que no posean la RAM suficiente para cargar la aplicación.

PROBLEMAS

Page 11: APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando

LOS APUNTADORES, Y ESO PA QUE? (2)

• Gasto extravagante de memoria, pues esta se reserva en tiempo de compilación, y dicha reserva se hace tomando el peor de los casos.• Problemas en equipos que no posean la RAM suficiente para cargar la aplicación.

PROBLEMAS

Page 12: APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando

LOS APUNTADORES, Y ESO PA QUE? (3)

• Creación de estructuras dinámicas de datos tales como listas y arboles.

• Llamado de funciones por referencia.• Acceso a arreglos y matrices.

Oh, y ahora quien podrá

ayudarme???

Pos los punteros home!!!. Ya que estos permiten resolver problemas como los

anteriores ya que gracias a estos es posible crear estructuras dinámicas de datos en

vez de estructuras estáticas.

Algunos programadores prefieren los apuntadores por que hacen el código mas eficiente.

Page 13: APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando

LOS APUNTADORES

Lista de variables

#include <archivo_cabecera>

double a,b;int c = -3,d;

int main() { char e = ’A’, f = ‘Z’; . . . return 0;}

Page 14: APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando

LOS APUNTADORES. ALGUNAS DEFINICIONES

Variable: Lugar de memoria que puede mantener un valor.

Una variable posee tres atributos básicamente. • Nombre.• Tipo.• Dirección.

#include <archivo_cabecera>

char a = ‘H’,b;short c = 6;

int main() { int d; float e = 1.0; . . . return 0;}

0x00404090

0x00404A90

0x00404A9B

0x00504A90

0x00504A90

a

b

c

d

e

H

0

6

xxxx

1.0

Page 15: APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando

LOS APUNTADORES. ALGUNAS DEFINICIONES

Variable: Lugar de memoria que puede mantener un valor.

Una variable posee tres atributos básicamente. • Nombre.• Tipo.• Dirección.

#include <archivo_cabecera>

char a = ‘H’,b;short c = 6;

int main() { int d; float e = 1.0; . . . return 0;}

0x00404090

0x00404A90

0x00404A9B

0x00504A90

0x00504A90

a

b

c

d

e

H

0

6

xxxx

1.0

Page 16: APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando

DIRECCION DE MEMORIA

#include <archivo_cabecera>

int main() { float f = 3.14; . . . return 0;}

248440 f3.14

0 1 2 3

Page 17: APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando

¿ENTONCES QUE ES UN APUNTADOR?Apuntador: Un apuntador no es mas que una variable que almacena una dirección de memoria.

1

2

3

4

5

6

7

8

Page 18: APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando

¿ENTONCES QUE ES UN APUNTADOR?

#include <archivo_cabecera>

int main() { int i,j; int *p; p = &i; *p = 5; j = i; return 0;}

Apuntador: Un apuntador no es mas que una variable que almacena una dirección de memoria.

Acceso indirectoDesreferenciarReferenciar.

Page 19: APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando

¿ENTONCES QUE ES UN APUNTADOR?

#include <archivo_cabecera>

int main() { int i; int *p; p = &i; *p = 5; return 0;}

Page 20: APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando

TOME APUNTE PA QUE NO SE DUERMA

• Declaración de apuntadores.• Inicialización de apuntadores.• Referenciar (&): Apuntar a una direccion.• Desrefereneciar (Indireccion *): Obtencion del valor al que apunta.• Punteros a punteros.• Punteros void y NULL.• Funciones por referencia.

Page 21: APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando

FUNCIONES POR REFERENCIA#include <archivo_cabecera>

void swap(int *, int *);

int main() { int a,b; a=5; b=10; printf("%d %d\n",a,b); swap(&a,&b); printf("%d %d\n",a,b); return 0;

}

void swap(int *i, int *j) { int t; t = *i; *i = *j; *j = t; }

Page 22: APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando

TOME APUNTE PA QUE NO SE DUERMA

• www.google.com • http://computer.howstuffworks.com/c.htm• http://www.brackeen.com/vga/index.html• http://0pointer.de/• http://publications.gbdirect.co.uk/c_book/chapter5/pointers.html• http://home.netcom.com/~tjensen/ptr/ch9x.htm• http://www.augustcouncil.com/~tgibson/tutorial/ptr.html• http://boredzo.org/pointers/• http://cslibrary.stanford.edu/102/PointersAndMemory.pdf• http://cslibrary.stanford.edu/

Page 23: APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando