miércoles, 21 de abril de 2010

Apuntadores en C++

Un apuntador es una variable cuyo valor es la dirección de memoria de otra variable. Se dice que un apuntador “apunta” a la variable cuyo valor se almacena a partir de la dirección de memoria que contiene el apuntador. Por ejemplo, si un apuntador p almacena la dirección de una variable x, se dice que “p apunta a x”.

Los apuntadores en C++ sirven para señalar objetos, y también para manipularlos.

Diferencia entre apuntador y variables
Declarar un apuntador no creará un objeto. Por ejemplo: int *entero; no crea un
Objeto de tipo "int" en memoria, sólo crea una variable que puede contener una dirección
de memoria. Se puede decir que existe físicamente la variable "entero", y también que
esta variable puede contener la dirección de un objeto de tipo "int".

Beneficios:
• Generar elementos bajo demanda, i.e. asignación dinámica de memoria
• Manipular y recorrer grandes espacios de memoria
• Generar estructuras de datos complejas
• Parámetros de entrada/salida para funciones, i.e. parámetros por referencia

Dificultades:
• Programación avanzada, caótica y/o complicada
• Programación más susceptible de errores muy difíciles de depurar
• Dificultad para leer y comprender código

Uso de los apuntadores
El operador unario o monódico & devuelve la dirección de memoria de una variable.

int *ptr;
ptr = &count /* Guarda la dirección de count en ptr */
/* El operador unario & regresa la dirección de una variable */

El operador de indirección o de referencia * devuelve el ``contenido de un objeto apuntado por un apuntador''.

int total;
total = *ptr;
/* El valor de la dirección guardada en ptr es asignada a total */

Ejemplo de uso de apuntadores.

int main()
{
int j;
int k;
int l;
int *pt1; /* Declara un apuntador entero */
int *pt2; /* Declara un apuntador entero */
float values[100];
float results[100];
float *pt3; /* Declara un apuntador flotante */
float *pt4; /* Declara un apuntador flotante */
j = 1;
k = 2;
pt1 = &j; /* pt1 contiene la dirección de la variable j */
pt2 = &k; /* pt2 contiene la dirección de la variable k */
pt3 = values;
/* pt3 contiene la dirección del primer elemento de values */
pt3 = &values[0];
/* Esto es equivalente a la afirmación de arriba */
return 0;
}


http://conclase.net/
http://www.fismat.umich.mx
http://eztigma.brinkster.net/apuntadores.html


1 comentario: