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.• 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.
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.
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;}
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
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
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;}
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
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.
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
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
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.
LOS APUNTADORES
Lista de variables
#include <archivo_cabecera>
double a,b;int c = -3,d;
int main() { char e = ’A’, f = ‘Z’; . . . return 0;}
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
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
DIRECCION DE MEMORIA
#include <archivo_cabecera>
int main() { float f = 3.14; . . . return 0;}
248440 f3.14
0 1 2 3
¿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
¿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.
¿ENTONCES QUE ES UN APUNTADOR?
#include <archivo_cabecera>
int main() { int i; int *p; p = &i; *p = 5; return 0;}
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.
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; }
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/
Top Related