APUNTADORES
Agenda
– Las variables y la Memoria
• Direcciones de Memoria
– Introducción a los apuntadores
• Concepto de un Apuntador
– Apuntadores
DIRECCIONES DE MEMORIA
La declaración de una variable involucra
necesariamente 4 cosas:
1000
1001
int y;
1002
int y=25;
yy
25
1003
int z=77;
1004
z
1005
1.
2.
3.
4.
El nombre,
El tipo de Datos,
Su valor y …
Su Dirección en memoria.
77
DIRECCIONES DE MEMORIA II
MEMORIA
Al valor o contenido de una variable se accede
por medio de su nombre.
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
printf("%d", &y);
//Imprime la dirección de memoria de la variable y
//NO SU CONTENIDO
DIRECCIONES DE MEMORIA III
#include <stdio.h>
void main()
{
int y = 25;
int z=77;
print f ( “y = %d\n" , y) ; / * visualiza el valor de y * /
printf ("&y = %p\n",& y) ; / * visualiza dirección de y * /
}
1000
y = 25
&y = 1002
1001
1002
y
25
1003
1004
z
1005
77
MEMORIA
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.
INTRODUCCIÓN
APUNTADORES-Punteros-pointers
Los apuntadores Son una de las razones
fundamentales para que el lenguaje C
sea tan potente y por ende tan utilizado.
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.
INTRODUCCIÓN
APUNTADORES-Punteros-pointers
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.
Utilizando variables punteros un
programa puede realizar muchas
tareas que no sería posible solo
utilizando tipos de datos estándar.
Concepto Apuntador
Apuntadores
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.
El tipo de variable que almacena
una dirección se denomina puntero.
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.
1000
int y=25;
1001
1002
y
int z=77;
25
1003
1004
z
1005
77
Se utilizan los
apuntadores para
optimizar el acceso a
esas variables.
Un puntero en C es una
Variable que SOLO
guarda la dirección de
memoria de otra
variable.
Declaración de Apuntadores
Apuntadores
Como cualquier variable, las variables punteros
han de ser declaradas antes de utilizarlas.
Se utiliza asterisco (*) para indicar que la variable
es variable apuntador.
tipoDatoApuntado
* nombreVbleApuntador;
Ejemplos:
int *ptr1;
// Puntero a un tipo de dato entero (int)
char *ptr2; / * Puntero a un tipo de dato char * /
float *f; / * Puntero a un tipo de dato float * /
SIEMPRE que aparezca un asterisco ( * ) en
una declaración de una variable, ésta es
una variable puntero.
Apuntadores
Inicialización de Apuntadores
Una variable apuntador contiene ……..
LA DIRECCIÓN DE UNA VARIABLE
Como se obtiene la dirección de una variable
???
Con el operador &
Ejemplo: &y
5010
printf( “y = %d\n" , y);
5011
y = 53
5012
y
5013
????
53
printf( “&y = %d\n" , &y); ????
5014
&y = 5012
5015
Inicialización de Apuntadores
int i;
int *ptr;
ptr = i ;
Apuntadores
/* Define una variable i */
/* Define un puntero a un entero ptr*/
/* Almacene la dirección de i en ptr, como???? */
MAPA DE MEMORIA ?????
5020
5021
5022
i
5023
5024
……..
5022
ptr
Apuntadores
Indirección
Se puede acceder al valor de una variable apuntada
utilizando el nombre del apuntador.
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
MAPA DE MEMORIA ?????
5020
//Ejemplo
void main(void) {
int var1;
int i=3;
int *ptr;
ptr = &i;
5021
5022
i
5024
var1
var1=*ptr;
var1++;
*ptr=var1;
….
}
ptr
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)
5020
letra
´O´
5021
5022
5023
5024
……
ptrLet
5020
Operadores Esenciales
OPERADORES
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 NULL
Tipos 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
La podemos definir
#define NULL 0
Cuando se declara y no se inicializa un apuntador a donde
está apuntando????
char *ptr;
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 = NULL;
Apuntadores VOID
Tipos 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,….
int main(){
void *ptr; / * declara un puntero void. Puntero genérico * /
char cadena;
int numero;
ptr=&cadena;
ptr=&numero;
return 0;
}
PUNTEROS A PUNTEROS
PUNTEROS A PUNTEROS
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)
Como un apuntador es una variable más, podemos
tener otro apuntador apuntando a éste.
PUNTEROS A PUNTEROS
PUNTEROS 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
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 letra = ´A´;
char *ptr1 = &letra;
char **ptr2 = &ptr1;
Para acceder al contenido de letra se puede hacer por medio de:
La misma variable
El apuntador ptr1
El apuntador ptr2
Bibliografía
• Joyanes Aguilar, Luis. PROGRAMACIÓN
EN C. Metodología, algoritmos y
estructura de datos Capitulo10.
• Google
GRACIAS POR SU
ATENCIÓN
Descargar

clase19_2011-1 APUNTADORES1