You are on page 1of 4

Republica Bolivariana de Venezuela

Ministerio de Educación y Deporte


Colegio Universitario Francisco de Miranda
Programación
Trabajo de Programación: Punteros

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:

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; // Para la declaración de un puntero se usa '*'
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 */

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);

You might also like