22
APUNTADORES

APUNTADORES. Agenda –Las variables y la Memoria Direcciones de Memoria –Introducción a los apuntadores Concepto de un Apuntador –Apuntadores

Embed Size (px)

Citation preview

Page 1: APUNTADORES. Agenda –Las variables y la Memoria Direcciones de Memoria –Introducción a los apuntadores Concepto de un Apuntador –Apuntadores

APUNTADORES

Page 2: APUNTADORES. Agenda –Las variables y la Memoria Direcciones de Memoria –Introducción a los apuntadores Concepto de un Apuntador –Apuntadores

Agenda

– Las variables y la Memoria• Direcciones de Memoria

– Introducción a los apuntadores• Concepto de un Apuntador

– Apuntadores

Page 3: 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

Page 4: APUNTADORES. Agenda –Las variables y la Memoria Direcciones de Memoria –Introducción a los apuntadores Concepto de un Apuntador –Apuntadores

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);

Page 5: APUNTADORES. Agenda –Las variables y la Memoria Direcciones de Memoria –Introducción a los apuntadores Concepto de un Apuntador –Apuntadores

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

Page 6: APUNTADORES. Agenda –Las variables y la Memoria Direcciones de Memoria –Introducción a los apuntadores Concepto de un Apuntador –Apuntadores

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.

Page 7: APUNTADORES. Agenda –Las variables y la Memoria Direcciones de Memoria –Introducción a los apuntadores Concepto de un Apuntador –Apuntadores

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.

Page 8: APUNTADORES. Agenda –Las variables y la Memoria Direcciones de Memoria –Introducción a los apuntadores Concepto de un Apuntador –Apuntadores

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.

Page 9: APUNTADORES. Agenda –Las variables y la Memoria Direcciones de Memoria –Introducción a los apuntadores Concepto de un Apuntador –Apuntadores

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.

Page 10: APUNTADORES. Agenda –Las variables y la Memoria Direcciones de Memoria –Introducción a los apuntadores Concepto de un Apuntador –Apuntadores

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;

Page 11: APUNTADORES. Agenda –Las variables y la Memoria Direcciones de Memoria –Introducción a los apuntadores Concepto de un Apuntador –Apuntadores

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 * /

Page 12: APUNTADORES. Agenda –Las variables y la Memoria Direcciones de Memoria –Introducción a los apuntadores Concepto de un Apuntador –Apuntadores

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

Page 13: APUNTADORES. Agenda –Las variables y la Memoria Direcciones de Memoria –Introducción a los apuntadores Concepto de un Apuntador –Apuntadores

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 ?????

Page 14: APUNTADORES. Agenda –Las variables y la Memoria Direcciones de Memoria –Introducción a los apuntadores Concepto de un Apuntador –Apuntadores

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

Page 15: APUNTADORES. Agenda –Las variables y la Memoria Direcciones de Memoria –Introducción a los apuntadores Concepto de un Apuntador –Apuntadores

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

Page 16: APUNTADORES. Agenda –Las variables y la Memoria Direcciones de Memoria –Introducción a los apuntadores Concepto de un Apuntador –Apuntadores

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.

Page 17: APUNTADORES. Agenda –Las variables y la Memoria Direcciones de Memoria –Introducción a los apuntadores Concepto de un Apuntador –Apuntadores

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;

Page 18: APUNTADORES. Agenda –Las variables y la Memoria Direcciones de Memoria –Introducción a los apuntadores Concepto de un Apuntador –Apuntadores

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=&numero;

int main(){

return 0;}

Page 19: APUNTADORES. Agenda –Las variables y la Memoria Direcciones de Memoria –Introducción a los apuntadores Concepto de un Apuntador –Apuntadores

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)

Page 20: APUNTADORES. Agenda –Las variables y la Memoria Direcciones de Memoria –Introducción a los apuntadores Concepto de un Apuntador –Apuntadores

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

Page 21: APUNTADORES. Agenda –Las variables y la Memoria Direcciones de Memoria –Introducción a los apuntadores Concepto de un Apuntador –Apuntadores

Bibliografía

• Joyanes Aguilar, Luis. PROGRAMACIÓN EN C. Metodología, algoritmos y estructura de datos Capitulo10.

• Google

Page 22: APUNTADORES. Agenda –Las variables y la Memoria Direcciones de Memoria –Introducción a los apuntadores Concepto de un Apuntador –Apuntadores

GRACIAS POR SU ATENCIÓN