Cuando se declara una variable, el compilador reserva un espacio de memoria para ella y asocia el nombre
de ésta a la dirección de memoria desde donde comienzan los datos de esa variable. Las direcciones de memoria
se suelen describir como números en hexadecimal.
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”.
Diapositiva 2
Referenciación
La referenciación es la obtención de la dirección de una variable. En C y C++ esto se hace a trav´es del
operador ‘&’, aplicado a la variable a la cual se desea saber su dirección. Nótese que se trata de un operador
unario. Ejemplo:
Código C y C++
int x = 25;
cout << "La dirección de x es: " << &x << endl; Este código imprime un valor del estilo “0x4fffd34”. Este valor puede variar durante cada ejecución del
programa, debido a que el programa puede reservar distintos espacios de memoria durante cada ejecución.
Diapositiva 3
Declaración de apuntadores
Para declarar un apuntador se especifica el tipo de dato al que apunta, el operador ‘*’, y el nombre del
apuntador. La sintaxis es la siguiente:
*
A continuación se muestran varios ejemplos:
Código C y C++
int *ptr1; // Apuntador a un dato de tipo entero (int) char *cad1, *cad2; // Dos apuntadores a datos de tipo carácter (char)
float *ptr2; // Apuntador a un dato de tipo punto-flotante (float)
Diapositiva 4
Asignación de apuntadores
Se pueden asignar a un apuntador direcciones de variables a través del operador de referenciación (‘&’) o
direcciones almacenadas en otros apuntadores. Ejemplos:
Código C y C++
int i = 5;
int *p, *q;
p = &i; // Se le asigna a ’p’ la dirección de ’i’
q = p; // Se le asigna a ’q’ la dirección almacenada en ’p’ (la misma de ’i’)
Diapositiva 5
Desrefereciación de apuntadores
La desreferenciación es la obtención del valor almacenado en el espacio de memoria donde apunta un
apuntador. En C y C++ esto se hace a trav´es del operador ‘*’, aplicado al apuntador que contiene la
direcci´on del valor. N´otese que se trata de un operador unario. Ejemplos:
Código C y C++
int x = 17, y;
int *p;
p = &x;
cout << "El valor de x es: " << *p << endl; // Imprime 17
y = *p + 3; // A ’y’ se le asigna 20
Diapositiva 6
Verificación de tipos en apuntadores
Al igual que el resto de las variables, los apuntadores se enlazan a tipos de datos específicos (apuntadores
a variables de cierto tipo), de manera que a un apuntador sólo se le pueden asignar direcciones de variables
del tipo especificado en la declaración del apuntador. Ejemplo:
Código C y C++ int *p1;
float *p2;
int x;
p1 = &x; // Esto es válido
p2 = &x; // Esto no es válido (el compilador genera un error)