¿que son las variables pasadas por valor y pasadas por referancia?
hola quiero saber que son las variables pasadas por valor y las variables pasadas por referencia y como es su funcionamiento
Hola te explico tu duda y te pongo un ejemplo mas abajo para que puedas comprobarlo.
Cuando se pasa una variable por valor a una funcion, lo que le estas pasando es una copia exacta de esa variable, UNA COPIA, esto es importante que lo entiendas porque al pasar una copia el gasto de memoria es el doble, ya que la variable original se encuentra en una posicion de memoria y la copia en otra, de manera que al modificar la copia no se queda reflejado en la variable original.
Sin embargo, cuando se pasa una variable por referencia, se esta pasando la direccion de memoria de dicha variable, con lo cual el espacio en memoria no se duplica y todos los cambios que realices quedaran reflejados.
Por tanto siempre que tengas que usar funciones que reciban variables cuyo valor se vaya a modificar deberas pasarlas por referencia.
Te dejo dos ejemplos en los que se ve muy bien la diferencia que hay de pasar por valor a pasar por referencia.
/*Llamada a una funcion POR VALOR*/
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
void Intercambio(int , int);
void main(void)
{
int a=20,b=30;
printf("a es %d y b es %d ", a, b);
Intercambio(a,b);
printf("n Despues del intercambio n");
printf(" a es %d y b es %d", a, b);
}
void Intercambio(int x, int y)
{
int aux;
aux=x;
x=y;
y=aux;
}
/*Llamada a una funcion POR REFERENCIA*/
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
void Intercambio(int *, int *);
void main(void)
{
int a=20,b=30;
printf("a es %d y b es %d", a, b);
Intercambio(&a ,&b);
printf("n Despues del intercambio n");
printf("a es %d y b es %d", a, b);
}
void Intercambio(int *x, int *y)
{
int aux;
aux=*x;
*x=*y;
*y=aux;
}
Espero que te sirva de ayuda.
Un saludo
Cuando se pasa una variable por valor a una funcion, lo que le estas pasando es una copia exacta de esa variable, UNA COPIA, esto es importante que lo entiendas porque al pasar una copia el gasto de memoria es el doble, ya que la variable original se encuentra en una posicion de memoria y la copia en otra, de manera que al modificar la copia no se queda reflejado en la variable original.
Sin embargo, cuando se pasa una variable por referencia, se esta pasando la direccion de memoria de dicha variable, con lo cual el espacio en memoria no se duplica y todos los cambios que realices quedaran reflejados.
Por tanto siempre que tengas que usar funciones que reciban variables cuyo valor se vaya a modificar deberas pasarlas por referencia.
Te dejo dos ejemplos en los que se ve muy bien la diferencia que hay de pasar por valor a pasar por referencia.
/*Llamada a una funcion POR VALOR*/
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
void Intercambio(int , int);
void main(void)
{
int a=20,b=30;
printf("a es %d y b es %d ", a, b);
Intercambio(a,b);
printf("n Despues del intercambio n");
printf(" a es %d y b es %d", a, b);
}
void Intercambio(int x, int y)
{
int aux;
aux=x;
x=y;
y=aux;
}
/*Llamada a una funcion POR REFERENCIA*/
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
void Intercambio(int *, int *);
void main(void)
{
int a=20,b=30;
printf("a es %d y b es %d", a, b);
Intercambio(&a ,&b);
printf("n Despues del intercambio n");
printf("a es %d y b es %d", a, b);
}
void Intercambio(int *x, int *y)
{
int aux;
aux=*x;
*x=*y;
*y=aux;
}
Espero que te sirva de ayuda.
Un saludo
