APUNTADORES

Un apuntador es una variable. Al dedicar un interés especial en los apuntadores, puede dar la impresión de que son elementos separados de las variables. No es así. Son variables, y como veremos, podemos asignarles nuevos valores, e incluso realizar algunas operaciones aritméticas útiles con ellos.
Una variable de tipo puntero está íntimamente ligada con el tipo al que apunta. Por ello, en la declaración, escribimos el nombre del tipo al que apuntará nuestro puntero, seguido de asterisco, y por último, el nombre del puntero. Ejemplo:

    int *p_entero;
    float *p_real;
    char *caracter;

Serán declaraciones de apuntadores que contendrán la dirección de memoria de un entero, un real y un carácter respectivamente.

El operador de indirección & se utiliza para referirse a la dirección de una variable, así el código siguiente: /* Reservamos 4 bytes para almacenar una dirección de memoria */
int *p_entero;
/* Reservamos 4 bytes para almacenar un entero */
int entero;
/* Escribimos en la variable p_entero la dirección de entero */
p_entero = &entero;
Es totalmente correcto ya que, aunque la variable entero no tenga ningún valor asignado todavía, lo que estamos haciendo es escribir en la variable p_entero la dirección de memoria donde se almacena la variable entero.

    El operador * se utilizar para manejar la dirección a la que apunta un puntero. Podríamos llamarlo el operador de acceso. Tanto el operador de acceso, como el de indirección, funcionan en notación prefija. Veamos un ejemplo que combina ambos operadores:

    int *p_entero;
    int entero1, entero2;
    entero1 = 2;
    entero2 = 5;
    p_entero = &entero1;
    entero1 = *p_entero + entero2;

    Del mismo modo podemos asignar un valor a la variable a la que apunta el puntero, de la forma:

    int *p_entero;
    int entero1, entero2;
    entero1 = 2;
    entero2 = 5;
    p_entero = &entero1;
    *p_entero = entero1 + entero2;

Aquí se incluye un ejemplo:

Código Fuente Ejecutable