|
Los punteros en el Lenguaje C , son
variables que poseen la dirección de las ubicaciones en memoria de otras variables,
y por medio de ellos se tendra un poderoso método de acceso a todas ellas .
Quizás esta parte sea la mas conflictiva del
lenguaje , ya que muchos programadores en C , lo ven como un método extraño
ó al menos desacostrumbrado. Sin embargo , y en la medida que uno se va familiarizando
con ellos , se convierten en la herramienta más cómoda y directa para el manejo de
variables complejas , argumentos , parámetros , etc , y se empieza a preguntar como es
que hizo para programar hasta aquí , sin ellos .
Veamos primero , como se declara un puntero :
tipo de variable apuntada *nombre_del_puntero ;
int *pint ;
double *pfloat ;
char *letra , *codigo , *caracter ;
En estas declaraciones sólo decimos al
compilador que reserve una posición de memoria para albergar la dirección de una
variable , del tipo indicado , la cual será referenciada con el nombre que hayamos dado
al puntero .
Obviamente , un puntero debe ser inicializado antes
de usarse , y una de las eventuales formas de hacerlo es la siguiente:
int var ; /* declaro ( y se crea en memoria ) una
variable entera ) */
int *pint ; /* " " " " "
un puntero que contendrá
la dirección de una variable entera */
pint = &var ; /* escribo en la dirección de
memoria donde está el
puntero la dirección de la variable entera */
Lo que hemos hecho se puede simbolizar de la
siguiente manera :
donde dentro del recuadro está el contenido de cada
variable .
Pint xxxxxx valor contenido por var
Dirección de var
yyyyyy (posición de memoria xxxxxx (posición de
memoria
ocupada por el puntero ) ocupada por la variable)
El símbolo & , ó dirección , puede
aplicarse a variables , funciones , etc , pero nó a constantes ó expresiones , ya que
éstas no tienen una posición de memoria asignada.
La operación inversa a la asignación de un puntero
, de referenciación del mismo , se puede utilizar para hallar el valor contenido por la
variable apuntada . Así por ejemplo serán expresiones equivalentes :
y = var ;
y = *pint ;
printf("%d" , var ) ;
printf("%d" , *pint) ;
En estos casos , la expresión "
*nombre_del_puntero " , implica " contenido de la variable apuntada por el mismo
" . Veamos un corto ejemplo de ello :
#include "STDIO.H"
main()
{
char var ; /*una variable del tipo caracter */
char *pchar; /* un puntero a una variable del
tipo caracter */
pc = &var ; /*asignamos al puntero la
direccion de la variable */
for (var = 'a'; var1 <<= 'z'; var1++)
printf("%c", *pchar) ; /* imprimimos el
valor de la variable apuntada */
return 0 ;
}
|