punteros

Páginas: 5 (1016 palabras) Publicado: 3 de junio de 2013
Punteros.
Un puntero o apuntador es una variable que da referencia a una región de memoria; en otras palabras es una variable cuyo valor es una dirección de memoria. Si se tiene una variable ' p ' de tipo puntero que contiene una dirección de memoria en la que se encuentra almacenado un valor ' v ' se dice que ' p ' apunta a ' v’. El programador utilizará punteros para guardar datos en memoriaen muchas ocasiones, de la forma que se describe a continuación.
[Memoria]
| . |
| . |
| . |
----- |---------|
| p |---->| v |
----- |---------|
| . |
| . |
| . |
Trabajar con punteros no implica la manipulación de los datos en sí, sino manejar las direcciones dememoria en la cuales estos residen.
Introducción
Los punteros son de amplia utilización en programación y muchos lenguajes permiten la manipulación directa o indirecta de los mismos. La principal razón de ser de los punteros es la de manejar datos alojados en la zona de memoria dinámica oheap (aunque también se pueden manipular objetos en la zona estática), bien sean datos elementales, estructuras(structen C) u objetos pertenecientes a una clase (en lenguajes Orientados a Objetos). Gracias a esta propiedad, los punteros permiten modelar un grafo, en donde los elementos de éste son los datos residentes en memoria y las relaciones entre los elementos son los propios apuntadores.
En nuevos lenguajes de alto nivel, los punteros se han tratado de abstraer. De tal forma que en ellenguaje C# sólo pueden ser usados en zonas de código delimitadas como "inseguras", o llegando a su total desaparición del código en lenguajes como Java o Eiffel.
Que no estén en el código no implica que no existan: internamente, la Máquina Virtual Java trata todas las variables que referencian objetos como punteros a zonas de memoria que realmente contienen los objetos. Esto puede causar ciertos efectos lateralessi no se tiene en cuenta. De hecho, no es descabellado pensar que Java está utilizando punteros si cuando uno accede a una propiedad de un objeto no inicializado es lanzada la excepción NullPointerException.
Ejemplo de uso de punteros en una estructura en C
El ejemplo que sigue es propio del lenguaje C/C++ y no es de aplicación en otros lenguajes de programación:
struct Elemento // Ejemplo deun nodo de lista doble enlazada
{
int dato;
struct Elemento *siguiente; // El '*' es el operador de indirección, y es el usado para declarar punteros
struct Elemento *anterior;
};
Para acceder a los atributos como punteros de una estructura que va a ser tratada como tal, se debe desreferenciar el puntero y acceder a sus miembros como se haría con una variable normal, o usardirectamente el operador: ->. De tal modo que:
Elemento *elem;
Elemento sig1 = (*elem).siguiente;
Elemento sig2 = elem->siguiente;
/* Se cumple que: sig1==sig2 */
Los paréntesis en este ejemplo son necesarios, pues el operador '*' es el que menor prioridad de operaciones tiene asignada (por lo que se haría *(elem.siguiente), lo que es incorrecto, pues trataría acceder a un campo de una direcciónde memoria, y no de una estructura. Esto es un error sintáctico, en tiempo de compilación).
Otro ejemplo en C++: Se presenta una función que no devuelve ningún valor, esta función llamada "swap" tiene como parámetros dos punteros del tipo int. Así, cuando sea llamada desde alguna parte del programa, recibirá las direcciones de dos variables; luego accederá a dichas variables gracias al operador deindirección (* precediendo al identificador del puntero) y podrá intercambiar sus valores residentes.

void swap(int *x, int *y)
{
int temp;
temp = *x; // copia el valor apuntado por x a temp
*x = *y; // copia el valor apuntado por y en la ubicación del puntero x
*y = temp; // copia el valor de temp en la ubicación apuntada por y
}




Ejemplo en C#
//Suma...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Punteros
  • Puntero
  • Punteros
  • Punteros
  • Punteros
  • Punteros
  • Los Punteros Laser
  • el puntero

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS