You are on page 1of 3

Investigacin N2

Nombre: Jessibeth Ortiz Cdula: 8-894-2138


Fecha: 07-03-2017

Diferencias entre Pase de Parmetros por Palor y por Referencia

En C++ se pueden pasar argumentos por valor o por referencia a la hora de


llamar una funcin o un mtodo de una clase.

Paso de argumentos por valor:

Cuando pasamos argumentos por valor lo que sucede es que se realiza una
copia de los valores que se envan a la funcin y de esta forma los valores
originales permanecen inalterados, por ejemplo, si tenemos una funcin
intercambiar( ) que recibe dos nmeros enteros y los intercambia
literalmente, es decir, el contenido de a pasa hacia b y viceversa, si se tiene
el siguiente programa:

1 #include <iostream>
2
3 using namespace std;
4
5 void intercambiar(int, int); //Protipo de la funcin para intercambiar los valores
6
7 int main(void)
8 {
9 int a = 2,b = 3;
10 cout<<"Valores originales a = "<<a<<" y b = "<<b<<endl<<endl;
11 intercambiar(a,b); //Llmado a la funcin intercambiar
12 cout<<"Luego de la funcion a = "<<a<<" y b = "<<b<<endl<<endl;
13
14 return 0;
15 }
16
17 void intercambiar(int i, int j)
18 {
19 int z;
20 z = i;
21 i = j;
22 j = z;
23 }

Y al compilar y ejecutar el cdigo anterior lo que se obtiene en pantalla son


los valores que contienen las variables principales.
Cuando se imprime el valor de las variables a y b se observa que de hecho
no fueron alteradas despus de la llamada a la funcin intercambiar( ), esto
se debe a que en realidad lo que le pasamos a la funcin fue una copia de
los valores de las variables a y b, por lo tanto era de esperar que las copias
se cambiaran pero que finalmente los elementos originales permanecieran
intactos.

Paso de argumentos por referencia:

Por el contrario, cuando se pasan argumentos por referencia, no se pasa


una copia de los valores originales, sino que se crea (cmo su nombre lo
indica) una referencia que tiene la misma direccin en memoria del
elemento original, esto quiere decir dos cosas, en primer lugar la variable
con la cual se trabajar al interior de la funcin que recibe la referencia ser
por definicin un sinnimo de la variable original, esto quiere decir que ser
idntica y cuanto a la direccin de memoria, su contenido, etc; Por otro lado
esto quiere decir que cualquier modificacin que hagamos en la funcin al
contenido de la referencia afectar de forma inmediata a las variables
originales.

Para pasar valores por referencia a una funcin, solo se debe anteponer el
smbolo &(ampersand) en el nombre de la variable que ser la referencia de
las variables originales, es decir, el prototipo de la nueva funcin
intercambiar( ) que ahora trabaja con referencias, ser:

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

Luego si solo agregamos este operador (el & se conoce tambin como
operador de referencia), al programa anterior tal como se muestra a
continuacin, el uso de las variables ser comn y corriente, sin embargo
cualquier cambio que se realice en ellas afectar directamente a las
variables en el programa principal (funcin main( )), si compilamos y
ejecutamos el siguiente cdigo:

1 #include <iostream>
2
3 using namespace std;
4
5 void intercambiar(int &i , int &j ); //Protipo de la funcin para intercambiar los valores
6
7 int main(void)
8 {
9 int a = 2,b = 3;
10 cout<<"Valores originales a = "<<a<<" y b = "<<b<<endl<<endl;
11 intercambiar(a,b); //Llmado a la funcin intercambiar
12 cout<<"Luego de la funcion a = "<<a<<" y b = "<<b<<endl<<endl;
13
14 return 0;
15 }
16
17 void intercambiar(int &i, int &j)
18 {
19 int z;
20 z = i;
21 i = j;
22 j = z;
23 }
Al ejecutar el cdigo, se obtiene en pantalla el siguiente resultado:

Entonces se puede notar como en esta ocasin si se vio afectado el


contenido de las variables originales (aunque finalmente no est del todo
bien decir originales ya que como habamos comentado, en el fondo, las
variables son las mismas al compartir la misma direccin en memoria).

You might also like