160 likes | 399 Views
PUNTEROS Ó (apuntadores) EN LENGUAJE C. ¿QUÉ ES UN PUNTERO?. Un puntero es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. No hay que confundir una dirección de memoria con el contenido de esa dirección de memoria.
E N D
¿QUÉ ES UN PUNTERO? • Un puntero es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. • No hay que confundir una dirección de memoria con el contenido de esa dirección de memoria.
DIRECCIONES DE MEMORIA • Cuando una variable se declara se asocian 3 atributos. • int n; /* asocia al nombre n, el tipo int y la dirección de alguna posición de la memoria donde se almacena el valor de n */ 0x4fffd34 printf(“%d”, n); n printf(“%d”, &n); int 75
EL CONCEPTO DE PUNTERO • Tiene correspondencia con la vida diaria. • Cuando se envía una carta por correo su información se entrega basada en un puntero (la dirección de esa carta). Cuando se telefonea a una persona, se utiliza un puntero (el número de teléfono que se marca) • Un puntero en C es la dirección de una variable.
REGLAS QUE RIGEN A UN PUNTERO • Un puntero es una variable como cualquier otra; • Una variable puntero contiene un dirección que apunta a otra posición de memoria; • En esa posición se almacenan los datos a los que apunta el puntero; • Un puntero apunta a una variable de memoria.
RELACCION ENTRE *P Y P DIRECCION N El valor de un puntero es una dirección. La dirección depende del estado de la computadora en la cual se ejecuta el programa. Direccion de memoria alta p 1001 p 1000 n 75 100 0999 101 n 75 100 099 Dirección de memoria baja
DECLARACION DE PUNTEROS • <tipo de dato apuntado> *<identificador de puntero> Ejemplos: int *ptr1; // puntero a un tipo de dato entero (int) long *ptr2; // Puntero a un tipo de dato entero largo (long int) char* ptr3; // Puntero a un tipo de dato char float *f; // Puntero a un tipo de tado float
INCIALIZACION • Asignar memoria (estáticamente) • int i; // define una variable i. • int *p; // define un puntero p. • p=&i; // asigna la dirección de i a p. • El operador & devuleve la dirección de la variable a la cual se aplica *p =50; El asterisco delante de la variable puntero indica “el contenido de” de la memoria apuntada.
ARITMÉTICA DE PUNTEROS • -A una variable puntero se le puede asignar la dirección de cualquier objeto. • -A una variable puntero se le puede asignar la dirección de otra variable puntero (siempre que las dos señalen el mismo objeto) • -A un puntero se le puede inicializar con el valor NULL • -Una variable puntero puede ser restada o comparada con otra si ambas apuntan a elementos de un mismo array.
PUNTEROS A PUNTEROS • Un puntero puede apuntar a otra variable puntero. ejemplo int valor _e = 100; int *ptr1 = &valor _e; int **ptr5 = &ptr1; valor _e = 95; *ptr1 = 105; **ptr5 = 99; 8000 ptr1 8080 8000 100 8081 ptr5 8082 8080 8083
PUNTEROS COMO ARGUMENTOS DE FUNCIONES • Con frecuencia se desea que una función calcule y devuelva más de un valor, o bien se desea que una función modifique las variables que se pasan como argumentos. • Cuando una variable es local se puede hacer visible a otra función pasándola como argumento. • También se pueden mezclar paso por referencia y paso por valor. • Es posible declarar punteros a cualquier tipo de variable, estructura o arreglo.
PROGRAMA EJEMPLO DE PUNTERO • punteros.cpp • punteros.exe
BIBLIOGRAFIA • Joyanes Zahonero PROGRAMACION EN C McGraw Hill, 2001 • http://www.atc.uniovi.es/telematica/2ac/Practicas/Interfaz-Win32-Sesion-1.pdf • http://dis.um.es/~lopezquesada/documentos/IES_0607/FP/curso/UT8/UT8I.pdf