You are on page 1of 3

Paso por valor

mircoles, 16 de mayo de 2012

C: Funciones. Pasaje de parmetros por valor y por


referencia...
Esta vez avanzaremos en lo relativo a las funciones en C, incorporando dos nuevos conceptos
acerca del pasaje de parmetros: el pasaje por valor y por referencia.

Paso de parmetros por valor:

ste es el pasaje que ya conocamos desde el post referente a funciones. Si recordamos un


poco al respecto, al realizar la definicin de la funcin colocamos los parmetros que sta
recibe especificando el tipo de dato de los mismos.

Luego, cuando hacemos el llamado y especificamos los argumentos, estos se evalan y se le


pasa a la funcin una copia de los mismos. A esto es lo que llamamos paso por valor ya que
la funcin trabajar con los valores de esas copias. Si pasramos variables como argumento,
stas no se modificaran por este sistema de copias.

Veamos esto con un ejemplo simple en que tenemos la siguiente funcin void que intercambia
los valores de dos enteros x e y:

Declaramos dos variables de tipo int en el main, mostramos sus valores, llamamos a la funcin
y volvemos a mostrarlos de la siguiente manera:

Y veramos en pantalla:

Donde vemos que, en efecto no se modificaron los valores. Pero agreguemos un printf al final
de la funcin para ver si se haban modificado o no los valores:
Y obtenemos:

Donde vemos que, en efecto se modificaron los valores de x e y dentro de la funcin pero que
no se modificaron las variables originales ya que al hacer el pasaje por valor se trabaja con la
copia de las mismas.

Paso de parmetros por referencia:

En el pasaje por referencia se pasa a la funcin las direcciones de memoria de las variables en
cuestin en lugar de su valor. A diferencia del paso por valor, aqu no se realizan copias de las
variables sino que se trabaja sobre la direccin de memoria que pasamos, lo que nos permite
modificar el valor de la variable en cuestin.

Veamos esto con el mismo ejemplo que usamos antes, pero usando punteros:

Luego hacemos el llamado a la funcin de la misma manera, pero pasando las direcciones de
memoria de x e y:

Obteniendo lo siguiente al compilar el programa y ejecutarlo:


Donde vemos que esta vez s se modific el contenido de las variables en cuestin.

Espero que les sea til la explicacin y ya nos veremos en la prxima entrada donde
seguiremos viendo ms temas de C.

#include <iostream>

using namespace std;

void intercambiar(int &i , int &j ); //Protipo de la funcin para


intercambiar los valores

int main(void)
{
int a = 2,b = 3;
cout<<"Valores originales a = "<<a<<" y b = "<<b<<endl<<endl;
intercambiar(a,b); //Llmado a la funcin intercambiar
cout<<"Luego de la funcion a = "<<a<<" y b = "<<b<<endl<<endl;

return 0;
}

void intercambiar(int &i, int &j)


{
int z;
z = i;
i = j;
j = z;
}

You might also like