Escolar Documentos
Profissional Documentos
Cultura Documentos
Integrantes:
Contreras Jonathan
Zerpa Gabriel
Caracas
Resumen
Los punteros son de amplia utilización en programación y casi todos los lenguajes
permiten la manipulación 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. Sin embargo, los punteros son un gran dolor de
cabeza para los programadores novatos y para cualquier programador que deba depurar
una aplicación.
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 en lenguajes como Java o Eiffel.
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 '.
Trabajar con punteros implica la no manipulación de las variables en sí, sino manejar
direcciones de memoria en la cuales residen los datos.
El ejemplo:
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 */
Ejemplo en C#
// 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);