Bienvenidos sean a este post, hoy veremos como es pasar valores por referencia.
En el post anterior hicimos un repaso de como trabaja de forma predeterminda una funncion a la hora de recibir valores como argumentos, y despues vimos una variante para modificar los valores siempre que lo pasemos a una funcion en lugar de trabajar con una copia, pero todo eso lo podemos solucionar con los apuntadores.
Como vinimos repitiendo hasta ahora cuando trabajamos con apuntadores no estamos manejando el valor de la variable sino con la direccion de memoria donde esta almacenada y nosotros apuntamos, es decir que si pasamos el apuntador el lenguaje no pasara una copia del valor sino la direccion de memoria para que pueda recuperar ese valor directamente de ahi y lo modifique en el mismo lugar, esto se lo denomina trabajar por referencia, para entenderlo vamos a tomar el codigo del post anterior y vamos a modificarlo, si no lo poseen simplemente generen un archivo nuevo con el nombre de ejemplo12.c y vamos a agregar el siguiente codigo:
ejemplo12.c
#include <stdio.h>
double PerimRect(double* a_al, double* a_an)
{
*a_al += 10;
*a_an += 10;
return 2*(*a_an + *a_al);
}
int main()
{
double alto = 15.0;
double ancho = 22.5;
double* a_alto = &alto;
double* a_ancho = &ancho;
double perimetro = PerimRect(a_alto, a_ancho);
printf("Alto: %.1f\nAncho: %.1f\nPerimetro: %.2f\n",
alto, ancho, perimetro);
return 0;
´}
Aqui volvimos al codigo original del post anterior, primero hablemos del main, en este caso lo primero que haremos sera definir dos variables de tipo double para el alto y el ancho, luego definiremos dos apuntadores para estas variables y les asignaremos las direcciones de memoria de las mismas, nuestra ultima definicion sera establecer una para el perimetro donde recibiremos el resultado de la funcion, observen que como datos pasamos los apuntadores de las variables sin desreferenciarlo ni nada, despues por ultimo mostraremos los tres valores posibles, con todo esto comentado pasemos a la funcion.
La funcion se encarga de calcular el perimetro del rectangulo, en este caso es muy similar a lo visto al comienzo en el post anterior pero con la salvedad de que recibira dos apuntadores, en este caso observen que debemos definirlos como tales, despues por medio de la desreferenciacion incrementaremos el valor de la variable, sino incrementaremos la direccion de memoria, y para ello aplicacmos operadores complementarios de los cuales hablamos en este post, por ultimo deolveremos el resultado de la ecuacion para calcular el perimetro, observen que en todo momento usamos el desreferenciador para que utilice los valores en la direccion de memoria, con todo esto comentado podemos pasar a ccompilarlo y ver su salida:
tinchicus@dbn001vrt:~/lenguajes/C$ ./prog/ejemplo12
Alto: 25.0
Ancho: 32.5
Perimetro: 115.00
tinchicus@dbn001vrt:~/lenguajes/C$
Aqui podemos ver como la salida nos muestra que los valores se modificaron en la funcion sin necesidad de tener que crear un objeto de tipo struct para poder manipular los datos en todos lados, con esto podemos ajustar nuestros codigos a nuestra necesidad, para los casos simples podemos seguir pasando los valores por copia pero para los casos donde necesitamos que el valor se vaya modificando por cada lugar donde lo enviemos usaremos el de referencia.
En resumen, hoy hemos visto como trabajar por referencia, que es, con que trabaja, como los apuntadores pasaron a ser algo mas util y por ultimo hemos visto como un ejemplo impractico del post anterior se facilito gracias a esta forma de trabajar, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
