4.10. Operador de Dirección e Indirección

 

Una dirección de memoria contiene un byte de información, una variable dependiendo de su tipo puede ocupar uno o más bytes. Un apuntador solo almacena la dirección del primer byte de la variable sin importar que  esta sea de más de 1 byte.

Para poder ocupar los apuntadores además de la dirección de memoria que estos almacenan, se necesita poder manipular los datos a los cuales estos apuntan para lograr; esto hay dos operadores:

 

  • * indirección ()
  • & dirección o referencia ()

 

El * sirve para identificar la indirección del apuntador.

 

NOTA: Para poder diferenciar el * de la declaración de puntero basta con ver si hay un tipo de variable que este indicando la declaración de la variable.

 

  • int * var  Es una declaración de variable tipo puntero a un entero 
  • mientras que  *prt  implica que estamos obteniendo la indirección del puntero

 

El * nos sirve entonces para obtener el valor al cual este apuntando una apuntador

Ejemplo 1: *var=5  (con esto se está diciendo que la variable previamente declarada como puntero a entero que es apuntada con var tome el valor de 5).

Ejemplo2: *cad=”hola”.

Por otro lado, el & devuelve la dirección de cualquier variable aunque no sea de tipo puntero.

 

Ejemplo:

 

 

 

 

Primero se declara una variable tipo entero de nombre a. En la segunda línea declara una variable tipo puntero a un entero de nombre ptr_a y finalmente se obtiene la dirección de la variable a con el operador de dirección, y se le asigna a la variable puntero ptr_a, para que de este modo ptr_a no apunte a un entero cualquiera si no que lo haga a la variable a.

 

En base al código anterior, se puede  hacer lo siguiente. 

 

 

Se podría pensar que al momento de ejecutar la tercer línea mostraría 23 pero no es así, debido a que en la segunda línea se le asigna 10 a la variable que está apuntando ptr_a que en este caso es a y el resultado en pantalla será 10.