56
CC-BY-SA • PID_00178132
Programación en ensamblador (x86-64)
4.2.6. Apuntadores
Un aspecto muy importante del lenguaje C es que permite acceder directamente a direcciones de memoria. Esto se consigue utilizando un tipo de variable que se conoce como apuntador a memoria. Un apuntador es una variable que contiene una dirección de memoria. Un apuntador se define indicando el tipo de dato al cual apunta y añadiendo el símbolo * ante el nombre del apuntador.
Cabe tener presente que al definir un apuntador solo se reserva espacio para
Símbolo * en C
almacenar una dirección de memoria; no se reserva espacio para poder almacenar un valor de un tipo determinado.
El formato general para definir un apuntador en C es el siguiente: tipo *nombre_apuntador;
Utilizamos el operador & para obtener la dirección de memoria donde se encuentra almacenada una variable, no su contenido. Esta dirección la podemos asignar a un apuntador. Ejemplo int *p1; char *p2;
// Se define un apuntador de tipo int // Se define un apuntador de tipo char
int x=1, y; char c='a';
// se definen dos variables de tipo int // se define una variables de tipo char
p1=&x; p2=&c; y=*p1;
// se asigna a p1 la dirección de la variable x // se asigna a p2 la dirección de la variable c // como p1 apunta a x, es equivalente a y = x.
Cuando trabajamos con vectores, el nombre del vector en realidad es un apuntador, una constante que contiene la dirección del primer elemento del vector.
int vector[3]={1, 2, 3}; //lo que es equivalente a hacer lo siguiente: int vector[3]; int *v; int i; v = vector; //vector i *v son apuntadores a entero. for (i=0; i<3; i++) *(v+i)=i+1; // *(v+i): indica que estamos accediendo al contenido // de la dirección 'v+i'
El símbolo * tiene múltiples funciones: definir un apuntador, acceder al contenido de una posición de memoria y también se corresponde con el operador aritmético de multiplicación.