Documente Academic
Documente Profesional
Documente Cultură
CARACTERISTICAS:
Los apuntadores son variables que almacenan
direcciones de memoria. En general una variable contiene un valor especfico dependiendo de como fue declarada. Un apuntador contiene la direccin de una variable que contiene un valor especfico. Una variable se refiere directamente a un valor y un apuntador se refiere indirectamente a un valor Una variable de este tipo "apunta" o hace referencia a uno ms objetos Desde su declaracin "sabe" el tipo de objetos a que hace referencia.
operador unario o mondico & devuelve la direccin de memoria de una variable; El operador de indireccin o desreferencia * devuelve el ``contenido de un objeto apuntado por un apuntador''. Operadores permitidos: asignar, sumar con contantes, restar, comparar, convertir y manejo de bits. Operadores prohibidos: multiplicar, dividir y sumar dos o ms apuntadores.
Beneficios:
Generar elementos bajo demanda, i.e. asignacin
dinmica de memoria Manipular y recorrer grandes espacios de memoria Generar estructuras de datos complejas Parmetros de entrada/salida para funciones, i.e. parmetros por referencia
Dificultades:
Programacin avanzada, catica y/o complicada Programacin ms susceptible de errores muy
USOS:
C, usa los apuntadores en forma extensiva. Por qu?
Declaracin De Apuntadores:
Cuando se declara una variable, el compilador reserva un espacio de
memoria para ella y asocia el nombre de sta a la direccin de memoria desde donde comienzan los datos de esa variable. Las direcciones de memoria se suelen describir como nmeros en hexadecimal. Un apuntador es una variable cuyo valor es la direccin de memoria de otra variable. Se dice que un apuntador apunta a la variable cuyo valor se almacena a partir de la direccin de memoria que contiene el apuntador. Por ejemplo, si un apuntador p almacena la direccin de una variable x, se dice que p apunta a x. Los apuntadores como cualquier otra variable deben de ser declarados antes de que puedan ser utilizados. El tipo de un apuntador lo proporciona implcitamente el tipo de la variable a la que apunta. Los apuntadores pueden ser declarados para apuntar a objetos de cualquier clase. La sintaxis general de declaracin es: <tipo> * <variable>
Apuntadores y Funciones
Cuando C pasa argumentos a funciones, los pasa por
valor, es decir, si el parmetro es modificado dentro de la funcin, una vez que termina la funcin el valor pasado de la variable permanece inalterado. Hay muchos casos que se quiere alterar el argumento pasado a la funcin y recibir el nuevo valor una vez que la funcin ha terminado. Para hacer lo anterior se debe usar una llamada por referencia, en C se puede simular pasando un puntero al argumento. Con esto se provoca que la computadora pase la direccin del argumento a la funcin.
Para entender mejor lo anterior consideremos la funcin swap() que intercambia el valor de dos argumentos enteros:
void swap(int *px, int *py); main() { int x, y; x = 10; y = 20; printf("x=%d\ty=%d\n",x,y); swap(&x, &y); printf("x=%d\ty=%d\n",x,y); } void swap(int *px, int *py) { inttemp; temp = *px; /* guarda el valor de la direccion x */ *px = *py; /* pone y en x */ *py = temp; /* pone x en y */ }
Apuntadores y arreglos
Existe una relacin estrecha entre los punteros y los arreglos. En C, un nombre de
un arreglo es un ndice a la direccin de comienzo del arreglo. En esencia, el nombre de un arreglo es un puntero al arreglo. Considerar lo siguiente: int a[10], x; int *ap;
ap = &a[0];
x = *ap;
*(ap + 1) = 100; /* Se asigna al segundo elemento de 'a' el valor 100 usando ap*/ Como se puede observar en el ejemplo la sentencia a[t] es idntica a ap+t. Se debe
tener cuidado ya que C no hace una revisin de los lmites del arreglo, por lo que se puede ir fcilmente ms alla del arreglo en memoria y sobreescribir otras cosas.
Operaciones bsicas
Declaracin Los punteros se declaran con un asterisco, de esta forma: tipo * variable; Por ejemplo: int* puntero; Se dice que la variable puntero es un puntero a enteros (apunta a un entero).
Asignacin
El valor que puede adquirir un puntero es, por ejemplo, la direccin de una variable. El operador & devuelve la direccin de una variable: puntero = &variable;
Desreferencia de un puntero
Se puede alterar la variable a la que apunta un puntero. Para ello se emplea el operador de desreferencia, que es el asterisco: *puntero = 45; En este caso, se est introduciendo un 45 en la posicin de memoria a la que apunta puntero.
direcciones de memoria de las variables en cuestin en lugar de su valor. A diferencia del paso por valor, aqu no se realizan copias de las variables sino que se trabaja sobre la direccin de memoria que pasamos, lo que nos permite modificar el valor de la variable en cuestin.
Veamos esto con el mismo ejemplo que usamos antes, pero usando punteros:
ejecutarlo:
Donde vemos que esta vez s se modific el contenido de las variables en cuestin.