23
PUNTEROS O APUNTADORES

Punteros o Apuntadores

Embed Size (px)

DESCRIPTION

Una breve explicacion sobre los apuntadores en C++

Citation preview

Page 1: Punteros o Apuntadores

PUNTEROS O APUNTADORES

Page 2: Punteros o Apuntadores

Apuntador

Es una variable que contiene una dirección de memoria, la cual corresponderá a un dato o a una variable que contiene el dato.

Cada variable que se utiliza en una aplicación ocupa una o varias posiciones de memoria. Estas posiciones de memoria se acezan por medio de una dirección.

Page 3: Punteros o Apuntadores

Operador de dirección y deindirección

El Operador de Dirección ( &) regresa la dirección de una variable.

El Operador de Indirección ( * ), toma la dirección de una variable y regresa el dato que contiene esa dirección.

Page 4: Punteros o Apuntadores

Inicialización de un apuntador

Inicialización estática

int *ptr = &x;

Inicialización dinámica

funciones de asignación de memoria

malloc(), calloc(), realloc() y free().

Variable Referencia (Puntero): Es una variable estática, es decir se crea en tiempo de compilación.

Variable Referenciada (Anónima): Es una variable dinámica creada en tiempo de ejecución, que únicamente puede ser accedida a través de un puntero.

Page 5: Punteros o Apuntadores

Declaración de un apuntador

Tipo_dato *nombre de apuntador;

oTipo_dato : Especifica el tipo de objeto apuntado y puede ser cualquier tipo (int, float, char, etc).

oNombre de apuntador: Es el identificador (nombre asignado) del apuntador.

Page 6: Punteros o Apuntadores

<tipo_de_dato_apuntado> * <identificador_apuntador> = & <variable_a_apuntar>;

donde:

• <tipo_de_dato_apuntado>: Es el tipo de dato al cual va a apuntar el apuntador;• *: Es el elemento que dice que la variable va a ser un apuntador;Nota: En una declaración define la variable como apuntador • <identificador_apuntador>: Es el nombre del apuntador;• &: Es el elemento para obtener la dirección de la variable apuntada;• <variable_a_apuntar>: Identificador de la variable a apuntar .

Page 7: Punteros o Apuntadores

Al declarar un puntero hay que asegurarse de que su tipo base sea compatible con el tipo de objeto al que se quiera que apunte. Aunque no es una imposición de C, nosotros siempre declararemos el tipo de datos puntero inmediatamente después del tipo de datos al que apunta.

Page 8: Punteros o Apuntadores

Aritmética de Apuntadores

Page 9: Punteros o Apuntadores

Apuntadores y vectores

Las versiones con apuntadores en los arreglos son más rápidas que la forma común.

int a[10]; int *pa;

pa=&a[0]

*pa=a[0]

*(pa+1)=a[1]

a[n] = a *(a+n).

Page 10: Punteros o Apuntadores

Apuntadores y Matrices

int a[10][10];

int *b[10];

a[5][5] y b[5][5]

Page 11: Punteros o Apuntadores

Apuntadores y cadenas

char * mensaje[4] = {''Hola'',''Adios'',''Bye'',''Saludos''} ;

NULL (\0).

Page 12: Punteros o Apuntadores

Apuntadores a otros apuntadoresvoid main( )

{

char ch; /* Un caracter */

char *pch; /* Un apuntador a caracter */

char **ppch; /* Un apuntador a un apuntador a caracter

*/

ch = 'A';

pch = &ch;

ppch = &pch;

printf("%c\n", **ppch); /* muestra el valor de ch */

}

Page 13: Punteros o Apuntadores

Asignación Dinámica de Memoria

Permite obtener la memoria para variables que se precisen en la ejecución del

programa.

void *malloc (tamaño)

Page 14: Punteros o Apuntadores

Asignación de memoria a valores numéricos

tamaño = (número de elementos) * (tamaño del tipo)

Ejemplos:

int *apun;

apun = (int *) malloc (sizeof(int));

float *apun;

apun = (float *) malloc (sizeof(float));

Page 15: Punteros o Apuntadores

Declaración de variables puntero

typedef <tipo> *<ident>;

Donde tipo es el tipo base del puntero, que puede ser cualquier tipo válido e ident es el

nombre del tipo de datos.

Page 16: Punteros o Apuntadores

typedef int *PuntAInt;// Tipo puntero a enteros (int)typedef char *PuntACar;// Tipo puntero a caracteres (char)

Tras definir los tipos de datos, es posible definir una variable de estos tipos del modo siguiente:

PunAInt contador; //contador es una variable de tipo PuntAIntPuntACar carácter; // carácter es una variable de tipo PuntACarLa variable contador no contendrá un valor entero (tipo int), sino la dirección de memoria donde esté almacenado un valor de tipo int. El valor almacenado en la variable anónima de tipo int apuntada por contador será accesible a través de este puntero.

EJEMPLO

Page 17: Punteros o Apuntadores

Los apuntadores en C se rigen por la siguientes reglas básicas:

1. Un apuntador es una variable como cualquier otra;2. Una variable apuntador contiene una dirección que apunta a otra posición de memoria;3. En esa posición de memoria se almacenan los datos a los que apunta el apuntador;4. Un apuntador apunta a una variable que se encuentra almacenada en alguna parte de la memoria física.

Page 18: Punteros o Apuntadores

Apuntador NULL

Es aquel que no apunta a ninguna localidad de memoria o dato valido, este es muy útil cuando se requiere indicar al programa que valide cuando el apuntador no esta apuntando a nada (dato no valido).

Es decir, es muy útil para propósitos de comparación en una estructura condicional o en una iterativa,

Page 19: Punteros o Apuntadores
Page 20: Punteros o Apuntadores
Page 21: Punteros o Apuntadores

Apuntador void

Son apuntadores que apuntan a cualquier tipo de dato, es decir, no se inicializa con un tipo de dato especifico, también son llamados puntadores genéricos.

void *ptr;

Un apuntador void permite a una función especificar un parámetro de entrada para recibir cualquier tipo de apuntador sin que se produzca un error de tipos.

Page 22: Punteros o Apuntadores
Page 23: Punteros o Apuntadores

REFERENCIAS

Departamento de Lenguajes y Ciencias de la Computación, 2005-2006. [En línea]. Available: http://es.scribd.com/doc/94274637/tema2. [Último acceso: 08 11 2012]

http://computacion.cs.cinvestav.mx/~efranco

El presente artículo fue realizado con la ayuda del libro “Programación en C++”, del autor Luis JoyanesAguilar, editorial Mc Graw Hill

Programación Digital I, Gilberto Diaz, Facultad de Ingeniería