Puntero (informática)

Puntero (informática)

Un puntero o apuntador es una variable que referencia 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 memoria en muchas ocasiones, de la forma que se describe a continuación.

           [Memoria]
          |    .    |
          |    .    |
          |    .    |
-----     |---------|
| p |---->|    v    |
-----     |---------|
          |    .    |
          |    .    |
          |    .    |

Trabajar con punteros implica la no manipulación de los datos en sí, sino manejar las direcciones de memoria en la cuales estos residen.

Contenido

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 razón de ser principal de los punteros reside en manejar datos alojados en la zona de memoria dinámica o heap (aunque también se pueden manipular objetos en la zona estática), bien sean datos elementales, estructuras (struct en 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 el lenguaje 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 laterales si 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 inicalizado 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 de un 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 usar directamente 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ón de memoria, y no de una estructura. Esto es un error sintáctico, en tiempo de compilación).

Otro ejemplo en C++

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 de dos números enteros
private unsafe int Suma(int* a, int* b)
{
    return *a + *b;
}
 
// Su uso (El método llamador también debe tener la palabra clave 'unsafe'):
// int x, y;
// int *ptr1 = &x;
// int *ptr2 = &y;
// Suma(ptr1, ptr2);

Véase también

Enlaces externos


Wikimedia foundation. 2010.

Игры ⚽ Нужен реферат?

Mira otros diccionarios:

  • Puntero inteligente — En programación, un puntero inteligente (o smart pointer) es un tipo abstracto de datos que simula el comportamiento de un Puntero (informática) pero añadiendo nuevas características adicionales, como recolector de basura automático y comprobador …   Wikipedia Español

  • Puntero — ► adjetivo 1 Que tiene buena puntería. 2 Que destaca respecto a los demás en alguna actividad: ■ es el jugador puntero del equipo. SINÓNIMO destacado sobresaliente ► sustantivo masculino 3 Punzón o vara con que se señala una cosa y se llama la… …   Enciclopedia Universal

  • puntero — {{#}}{{LM P32286}}{{〓}} {{SynP33052}} {{[}}puntero{{]}}, {{[}}puntera{{]}} ‹pun·te·ro, ra› {{《}}▍ adj./s.{{》}} {{<}}1{{>}} Que aventaja a los de su misma clase o que sobresale entre ellos: • una empresa puntera.{{○}} {{《}}▍ s.m.{{》}} {{<}}2{{>}}… …   Diccionario de uso del español actual con sinónimos y antónimos

  • Informática — ► sustantivo femenino 1 INFORMÁTICA Conjunto de conocimientos científicos y técnicas que hacen posible el tratamiento automático de la información mediante dispositivos electrónicos o el uso de ordenadores. FRASEOLOGÍA informática musical MÚSICA… …   Enciclopedia Universal

  • Ratón (informática) — Ratón con cable y rueda. Ratón …   Wikipedia Español

  • Pila (informática) — Una pila (stack en inglés) es una lista ordinal o estructura de datos en la que el modo de acceso a sus elementos es de tipo LIFO (del inglés Last In First Out, último en entrar, primero en salir) que permite almacenar y recuperar datos. Esta… …   Wikipedia Español

  • Cluster (informática) — Un clúster en la Universidad McGill. Un ejemplo de clúster en l …   Wikipedia Español

  • Lista (informática) — En Ciencias de la Computación, una lista enlazada es una de las estructuras de datos fundamentales, y puede ser usada para implementar otras estructuras de datos. Consiste en una secuencia de nodos, en los que se guardan campos de datos… …   Wikipedia Español

  • Cursor (informática) — Un cursor de texto parpadeante parado a la mitad de teclear la palabra Wikipedia. En informática un cursor es un indicador que se usa para mostrar la posición en un monitor o en otros dispositivos de visualización que responderán a las… …   Wikipedia Español

  • Nodo (informática) — En informática, de forma muy general, un nodo es un punto de intersección o unión de varios elementos que confluyen en el mismo lugar. Ahora bien, dentro de la informática la palabra nodo puede referirse a conceptos diferentes según el ámbito en… …   Wikipedia Español

Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”