You are on page 1of 2

n puntero o apuntador es una variable que referencia una regin de memoria; en otras palabras es una variable cuyo valor

es una direccin de memoria. Si se tiene una variable ' p ' de tipo puntero que contiene una direccin 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 continuacin.

[Memoria] | | | ----. . . | | |

|---------| v |

| p |---->| -----

|---------| | | | . . . | | |

Trabajar con punteros implica la no manipulacin de los datos en s, sino manejar las direcciones de memoria en la cuales estos residen.
Contenido
[ocultar]

1 Introduccin 2 Ejemplo de uso de punteros en una estructura en C 3 Vase tambin 4 Enlaces externos

[editar]Introduccin Los punteros son de amplia utilizacin en programacin y muchos lenguajes permiten la manipulacin directa o indirecta de los mismos. La razn de ser principal de los punteros reside en manejar datos alojados en la zona de memoria dinmica o heap (aunque tambin se pueden manipular objetos en la zona esttica), 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# slo pueden ser usados en zonas de cdigo delimitadas como "inseguras", o llegando a su total desaparicin del cdigo en lenguajes como Java o Eiffel. Que no estn en el cdigo no implica que no existan: internamente, la Mquina 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 inicializado es lanzada la excepcin NullPointerException. [editar]Ejemplo

de uso de punteros en una estructura en C

El ejemplo que sigue es propio del lenguaje C/C++ y no es de aplicacin en otros lenguajes de programacin: struct Elemento // Ejemplo de un nodo de lista doble enlazada { int dato; struct Elemento *siguiente; // El '*' es el operador de indireccin, 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 hara 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 parntesis en este ejemplo son necesarios, pues el operador '*' es el que menor prioridad de operaciones tiene asignada (por lo que se hara *(elem.siguiente), lo que es incorrecto, pues tratara acceder a un campo de una direccin de memoria, y no de una estructura. Esto es un error sintctico, en tiempo de compilacin). Otro ejemplo en C++: Se presenta una funcin que no devuelve ningn valor, esta funcin llamada "swap" tiene como parmetros 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 de indireccin (* precediendo al identificador del puntero) y podr intercambiar sus valores residentes. void swap(int *x, int *y) { int temp; temp = *x; *x = *y; *y = temp; } Ejemplo en C# //Suma de dos nmeros enteros private unsafe int Suma(int* a, int* b) { return *a + *b; } // Su uso (El mtodo llamador tambin debe tener la palabra clave 'unsafe'): // int x, y; // int *ptr1 = &x; // int *ptr2 = &y; // Suma(ptr1, ptr2); // copia el valor apuntado por x a temp // copia el valor apuntado por y en la ubicacin del puntero x // copia el valor de temp en la ubicacin apuntada por y

You might also like