Professional Documents
Culture Documents
Puntero:
Empezamos con la definicin de punteros:
Def: Una variable tipo puntero (o puntero) es una variable que en su interior almacena
una direccin de memoria.
As entonces, debemos saber que las direcciones de memoria de una computadora se
expresan como nmeros hexadecimales y estos a su vez se escriben acompaados de una
letra H, indicando que ese nmero es hexadecimal. Ejemplos: 24AF H, A120 H, DA65 H.
Una variable simple de tipo int, almacena solo nmeros enteros. Una variable simple de
tipo float almacena nmeros con punto decimal (reales). Una variable de tipo char
almacena un carcter ASCII. Por lo tanto, siguiendo la definicin dada y la lgica anterior,
dentro de un puntero habr siempre almacenado un nmero con formato hexadecimal que
corresponde a una direccin de memoria.
Declaracin e Inicializacin:
Para declarar un puntero partamos del ejemplo siguiente:
int *puntero1;
Con esta lnea escrita en nuestro programa acabamos de crear un puntero que est
preparado para almacenar direcciones de variables enteras, ya que le pusimos el prefijo
int. Del mismo modo, si quisiramos trabajar con punteros de variables float deberamos
escribir:
float *puntero2;
PNF
le da a la variable k el valor 56 (siendo k una variable entera). Lo nico que difiere es que
ahora a puntero1 en lugar de almacenarle un numero entero, le hemos asignado una
direccin.
Indireccion:
Ahora vamos a ver el concepto de indireccion:
Indireccion es acceder INDIRECTAMENTE al valor de una variable, es decir, utilizar una
variable pero sin usarla en forma directa. Hasta ahora nosotros por ejemplo a nuestra
variable entera x podamos darle valor accediendo directamente a ella de la siguiente
forma:
x=32;
lo cual se lee a la variable x asgnele el valor 32. Pero ahora tambin tenemos la opcin
de hacer la misma operacin de asignacin accediendo indirectamente a x. Para ello usamos
el hecho de que anteriormente ya hemos dado la orden (puntero1=&x) de que un puntero
(puntero1) apunte a la variable x. Por lo tanto haciendo uso de ese puntero, podemos
escribir:
*puntero1=32;
lo cual se lee A la variable a la que apunta puntero1, asgnele el valor 32. Ntese que en
esta ultima instruccin, no aparece la variable x. Esto es as ya que hicimos acceso a ella en
forma indirecta usando el operador de indireccion (*).
PNF
Ejemplo:
Para diferenciar los conceptos usemos el siguiente ejemplo, aclarando que es cada cosa.
int x, *puntero1; //declaramos x y el puntero
puntero1=&x; //se hace que puntero1 apunte a la variable x
//almacenando en puntero1 la direccin de x
x=32;//se le da el valor a x directamente (tambin vale
//*puntero1=32)
printf(El valor de x es: %d\n,x); //Se muestra el valor de x
//haciendo acceso directo a la variable x
printf(El valor de x es: %d\n,*puntero1); //Se muestra el valor
//de x indirectamente
printf(La direccin de la variable x es: %p\n,&x);//Se muestra
//la direccin de x directamente
printf(La direccin de la variable x es: %p\n,puntero1); //O se
//muestra la direccin de x mostrando el valor que tiene
//almacenado puntero1
sin embargo, si hacemos una funcin a la que se le pasen parmetros por referencia (es
decir, que reciba como argumentos punteros) y usamos adems la indireccion, podemos
lograr hacer todo en una nica funcin:
void sum_res_mul(int a,int b,int *s,int *r,int *p);
Aclaracin: El mbito de un programa se conoce como la funcin actual que est ejecutando el
mismo en un momento dado. Cuando realizamos la invocacin a la funcin sum_res_mul,
estaremos en el mbito main, y luego pasaremos al mbito sum_res_mul y una vez que se
realizan todas las instrucciones de este mbito, volveremos al mbito main.
Ntese que en el ejemplo la funcin es de tipo void, es decir que ni siquiera fue necesario
que devuelva un valor de la forma clsica usando un return (se conoce como forma esttica)
ya que los tres valores de la funcin son devueltos por referencia (se conoce como forma
dinmica).