Está en la página 1de 5

Punteros sin Mitos

Introduccin

El manejo de punteros por mucho tiempo ha sido el dolor de cabeza de los estudiantes y de profesores, es un concepto simple que sin duda deja que desear en las estrategias adoptadas por algunos instructores y profesores al realizar la transferencia de este conocimiento.

Los estudiantes se enfrentan a la incertidumbre de tener que desarrollar algunos programas empleando estos conceptos sin conocimiento a propiedad de su manejo, los profesores e instructores por su parte, se enfrentan a la dificultad de lograr un aprendizaje efectivo entre sus estudiantes.

La presente es una propuesta que pretende presentar de una forma simple el concepto de punteros sin dar muchas vueltas, estamos convencidos de que la mstica de este tema radica en gran parte en la falta de tacto al transmitirlo, quizs sea porque ni el mismo instructor interpreta a cabalidad el tema.

El concepto

Los punteros son en esencia variables que tienen la particularidad de almacenar direcciones de memoria, a diferencia de las variables comunes en las que se pueden almacenar solo datos de los tipos conocidos tales como: numricos (enteros, flotantes), alfanumricos (caracteres y smbolos) y lgicos, es decir que en un puntero no se pueden almacenar datos comunes, solo direcciones de memoria, estas direcciones de memoria bien pueden ser las que tengan asignadas otras variables o direcciones libres en la memoria.

El manejo de los Punteros

Como parte de la metodologa de esta gua se propone el uso de la siguiente ilustracin que permite representar el concepto:

Supngase que la memoria de la computadora es un espacio organizado como un casillero, donde en cada lugar se puede alojar una variable, por ejemplo si tenemos dos variables como x e y segn las siguientes rdenes:

int X, Y;

X = 10;

Y = 5.7;

Su representacin sera la siguiente:

A 1 2 3 4 10

A2 5.7 B1

Direccin libre

PX

PY

Como se aprecia en la ilustracin la variable X est ubicada en la direccin de memoria A2, por su parte la variable Y est ubicada en la direccin C3, si se observa la variable X contiene un valor o dato de tipo entero (10), la variable Y contiene un dato de tipo flotante (5.7). Lo importante a

resaltar en esta parte es reconocer que las variables siempre estn alojadas en alguna direccin de memoria.

Ahora bien, si se declaran variables puntero, por ejemplo PX y el puntero PY segn las siguientes ordenes:

Int *PX, *PY;

Su representacin seria la misma que dos variables cualesquiera (tal como X e Y) sin embargo no pueden contener datos ordinarios, solo direcciones de memoria, para tales efectos solo hay dos maneras posibles de asignarles direcciones de memoria:

Mediante el operador direccin: PX = &X;

En este ejemplo al puntero PX se le asigna la direccin de la variable X, es decir que se almacenara en PX la direccin de memoria de X que es A2, esta asignacin es vlida puesto que PX por ser un puntero est diseado para almacenar direcciones de memoria.

Ahora si se tratara de realizar una asignacin del dato de una variable directamente al puntero se obtendra un error por ejemplo: PX = X; en este caso se est tratando de copiar el contenido de X que es 10, un dato tipo entero al puntero PX, lo cual no es posible.

Mediante la funcin new(tipo_dato): PY = new(int);

En este ejemplo se est asignando al puntero PY una direccin de memoria que no est asignada a alguna variable, en este caso se localiza una direccin libre como B1 y se registra en la variable puntero PY, con lo cual ahora PY hace referencia a B1.

El uso de punteros permite maneras alternar de acceder a las direcciones de memoria sin emplear si es el caso las variables de memoria asociadas, as por ejemplo, utilizando el puntero PX se podra modificar el dato que contiene la variable X, esto es posible puesto que PX tiene almacenada la direccin de memoria donde se localiza X, con este dato por decirlo de alguna manera es posible disparar a donde est la variable X y asignarle un valor o bien tomar su valor para visualizarlo, esto se puede lograr empleando el operador indireccin asi por ejemplo:

*PX = 50;

Con la instruccin anterior se estara cambiando el valor contenido en la direccin referenciada por PX es decir el contenido de la direccin A2, que en esencia es la misma direccin a la que est asociada la variable X, con lo cual el nuevo valor de X o de la direccin A2 seria 50 en lugar del dato 10.

Tambin se podra hacer algo similar con el puntero PY as:

*PY = 35;

Con esta instruccin se estara enviando el dato 35 a la direcciona apuntada por el puntero PY, es decir a la direccin B1.

Con estas precisiones el esquema de memoria se vera de la siguiente forma:

A 1 2 3 4 50

B 35

A2 5.7 B1

Direccin libre

PX

PY

Para complementar esta explicacin, supongamos que ahora queremos que el puntero PY en lugar de hacer referencia al espacio B1, apunte a la direccin de memoria de la variable Y as:

PY = &Y;

Con esta instruccin si se observa con detenimiento, se estara dejando el dato de la direccin B1 sin quien haga referencia a l, es decir, ni una variable ni un puntero hacen referencia a l, con lo cual este dato (35), quedara perdido en la memoria.

Otras operaciones posibles son la asignacin de valores entre punteros as:

PX = PY;

Esta asignacin es posible puesto que ambas variables son del mismo tipo, por su naturaleza de punteros almacenan direcciones de memoria.

También podría gustarte