Upload
juana-paez-montoya
View
238
Download
0
Embed Size (px)
Citation preview
APUNTADORES
Agenda
– Las variables y la Memoria• Direcciones de Memoria
– Introducción a los apuntadores• Concepto de un Apuntador
– Apuntadores
DIRECCIONES DE MEMORIALa declaración de una variable involucra
necesariamente 4 cosas:1000
1001
1002
1003
1004
1005
1000
1001
1002
y
1003
1004
1005
int y;
int y=25;
int z=77; 77
1000
1001
1002
y
1003
1004
z
1005
1. El nombre, 2. El tipo de Datos, 3. Su valor y …4. Su Dirección en memoria.
25
DIRECCIONES DE MEMORIA II
Al valor o contenido de una variable se accede por medio de su nombre.
MEMORIA
Si quiero imprimir el valor de una variable debo utilizar simplemente su nombre:
printf("%d", y);
El operador & antepuesto al nombre de una variable da la dirección de memoria de la variable
//Imprime la dirección de memoria de la variable y //NO SU CONTENIDO
printf("%d", &y);
1000
1001
1002
1003
1004
1005
printf ("&y = %p\n",& y) ; / * visualiza dirección de y * /
print f ( “y = %d\n" , y) ; / * visualiza el valor de y * /print f ( “y = %d\n" , y) ; / * visualiza el valor de y * /
printf ("&y = %p\n",& y) ; / * visualiza dirección de y * /
DIRECCIONES DE MEMORIA IIIMEMORIA
25
77
1000
1001
1002
y
1003
1004
z
1005
#include <stdio.h>void main(){
}
int y = 25;int z=77;int y = 25;int z=77;
y = 25y = 25&y = 1002
Concepto Apuntador
Características de un Apuntador:• El apuntador apunta a algo.• Cuando se habla de apuntadores o señaladores
hablamos de dos ENTES.• Cuando se señala algo habrá que tener una
referencia de donde está ese algo.
APUNTADORES-Punteros-pointers
Los apuntadores Son una de las razones fundamentales para que el lenguaje C sea tan potente y por ende tan utilizado.
INTRODUCCIÓN
En los sistemas de Cómputo los datos se manejan por medio de variables y…..
La forma como una variable puede apuntar a otra variable es por medio de la dirección en memoria de la variable señalada.
APUNTADORES-Punteros-pointersINTRODUCCIÓN
Utilizando variables punteros un programa puede realizar muchas tareas que no sería posible solo utilizando tipos de datos estándar.
Las variables vistas hasta este momento contienen valores cualquiera de datos cualquiera, por el contrario las variables punteros contienen valores que son direcciones de memoria donde se almacenan otras variables.
Concepto ApuntadorApuntadores
El tipo de variable que almacena una dirección se denomina puntero.
Características de un Apuntador:
• Un puntero es una variable como cualquier otra…
• EXCEPTO QUE SOLO PUEDE ALMACENAR DIRECCIONES DE OTRAS VARIABLES COMÚN Y CORRIENTES.
• Un puntero APUNTA a otra variable en memoria.
Concepto Apuntador Apuntadores
Cuando se declara una variable en C, el compilador establece un área de memoria para almacenar el contenido de la variable. Esa variable se sitúa en una posición específica de la memoria, conocida como dirección de memoria.
Un puntero en C es una Variable que SOLO guarda la dirección de memoria de otra variable.
Se utilizan los apuntadores para optimizar el acceso a esas variables.
1000
1001
1002
1003
1004
1005
1000
1001
1002
y
1003
1004
1005
2525
77
1000
1001
1002
y
1003
1004
z
1005
int y=25;
int z=77;
Declaración de ApuntadoresApuntadores
Como cualquier variable, las variables punteros han de ser declaradas antes de utilizarlas. Se utiliza asterisco (*) para indicar que la variable es variable apuntador.
SIEMPRE que aparezca un asterisco ( * ) en una declaración de una variable, ésta es
una variable puntero.
tipoDatoApuntado * nombreVbleApuntador;
Ejemplos:
int *ptr1; // Puntero a un tipo de dato entero (int)
float *f; / * Puntero a un tipo de dato float * /
char *ptr2; / * Puntero a un tipo de dato char * /
Inicialización de ApuntadoresApuntadores
Una variable apuntador contiene ……..
Como se obtiene la dirección de una variable ??? LA DIRECCIÓN DE UNA VARIABLE
Con el operador &Ejemplo: &y
53
5010
5011
5012
y
5013
5014
5015
printf( “y = %d\n" , y); ????
printf( “&y = %d\n" , &y); ????
y = 53
&y = 5012
Inicialización de ApuntadoresApuntadores
int i; /* Define una variable i */int *ptr; /* Define un puntero a un entero ptr*/ /* Almacene la dirección de i en ptr, como???? */
……..
5022
5020
5021
5022
i
5023
5024
ptr
ptr = i ;
MAPA DE MEMORIA ?????
IndirecciónApuntadores
Se puede acceder al valor de una variable apuntada utilizando el nombre del apuntador.
….
5020
5021
5022
i
5024
var1
ptr
//Ejemplovoid main(void) { int var1; int i=3; int *ptr; ptr = &i; var1=*ptr; var1++; *ptr=var1; }
MAPA DE MEMORIA ?????
En el procedimiento del algoritmo simplemente se le antepone " * " al nombre del apuntador y se accede al valor de la variable de una forma común y corriente
Ejemplo EJEMPLO
Programa que declare una variable tipo carácter y la inicialice con la letra O. Cree un apuntador a esta letra e imprimala utilizando el apuntador(indirección)
´O´
……
5020
5020
letra
5021
5022
5023
5024
ptrLet
Operadores EsencialesOPERADORES
Operadores Vistos
&**
Obtiene la dirección de una variable. Define una variable como puntero (DECLARACIÓN).Obtiene el contenido de una variable puntero (PROCEDIMIENTO).
C requiere que las variables puntero direccionen realmente variables del mismo tipo de dato que está ligado a los punteros en sus declaraciones.
Apuntadores NULLTipos Especiales
La macro NULL es una macro que representa un valor de CERO
Alguna librerías la definen: STDEF. H, STDIO.H, STDLIB.H, STRING.H
Cuando se declara y no se inicializa un apuntador a donde está apuntando????
La podemos definir #define NULL 0
Muchas veces se hace necesario expresar explicitamente que un apuntador declarado no este apuntando a "NINGÚN" lugar (En apuntadores quiere decir que el apuntador apunta a la dirección CERO )
char *ptr;
char *ptr = NULL;
Apuntadores VOIDTipos Especiales
Se utiliza la palabra reservada VOID en la declaración de apuntadores, cuando se quiere que el puntero pueda apuntar a cualquier tipo de variables, int , char, float,….
void *ptr; / * declara un puntero void. Puntero genérico * /char cadena; int numero;
ptr=&cadena; ptr=№
int main(){
return 0;}
PUNTEROS A PUNTEROSPUNTEROS A PUNTEROS
Como un apuntador es una variable más, podemos tener otro apuntador apuntando a éste.
Un apuntador es una variable.
Como toda variable tiene un espacio en memoria, tiene un nombre, tiene un valor (Dirección de otra espacio en memoria)
PUNTEROS A PUNTEROSPUNTEROS A PUNTEROS
El concepto de apuntar a otro apuntador se utiliza con mucha frecuencia en programas complejos de C.
Se hace uso del operador * 2 veces
char letra = ´A´;char *ptr1 = &letra;
Ejemplo: Declaremos una variable tipo carácter, también un apuntador a esta variable. Y luego declaremos un puntero que apunte a este ultimo puntero.
char **ptr2 = &ptr1;
Para acceder al contenido de letra se puede hacer por medio de:La misma variableEl apuntador ptr1El apuntador ptr2
Bibliografía
• Joyanes Aguilar, Luis. PROGRAMACIÓN EN C. Metodología, algoritmos y estructura de datos Capitulo10.
GRACIAS POR SU ATENCIÓN