Logo Studenta

f7232128

¡Estudia con miles de materiales!

Vista previa del material en texto

· Cuando es por valor, la información de la variable se almacenan en una dirección de memoria diferente al recibirla en la función, por lo tanto si el valor de esa variable cambia no afecta la variable original, solo se modifica dentro del contexto de la función.
· Cuando es por referencia, la variable que se recibe como parámetro en la función apunta exactamente a la misma dirección de memoria que la variable original por lo que si dentro de la función se modifica su valor también se modifica la variable original.
La esencia de la diferencia corresponde a la libertad (o restricción) que existe sobre el parámetro de la función o método.
· El paso por valor se refiere a que se pasa una copia del valor del parámetro desde la función/método cliente. Al ser una copia, los cambios realizados directamente en la función/método sobre el valor del parámetro no serán reflejados al terminar la ejecución de la función/método.
· El paso por referencia se refiere a que se pasa el mismo valor del parámetro desde la función/método cliente. Al ser el mismo valor, los cambios realizados directamente en la función/método sobre el valor del parámetro serán reflejados al terminar la ejecución de la función/método.
En C++ se pueden pasar argumentos por valor o por referencia a la hora de llamar una función o un método de una clase, cuando pasamos argumentos por valor lo que sucede es que se realiza una copia de los valores que se envían a la función y de esta forma los valores originales permanecen inalterados, por ejemplo, si tenemos una función intercambiar( ) que recibe dos números enteros y los ‘intercambia’ literalmente, es decir, el contenido de a pasa hacia b y viceversa, si se tiene el siguiente programa:
	1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
	#include <iostream>
 
using namespace std;
 
void intercambiar(int, int); //Protipo de la función 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 función 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;
}
Y al compilar y ejecutar el código 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 después de la llamada a la función intercambiar( ), esto se debe a que en realidad lo que le pasamos a la función fue una copia de los valores de las variables ay b, por lo tanto era de esperar que las copias se cambiaran pero que finalmente los elementos originales permanecieran intactos.
Por otro lado, cuando se pasan valores por referencia, no se pasa una copia de los valores originales, sino que se crea (cómo su nombre lo india) una referencia que tiene la misma dirección en memoria del elemento original, esto quiere decir dos cosas, en primer lugar la variable con la cual se trabajará al interior de la función que recibe la referencia será por definición un sinónimo de la variable original, esto quiere decir que será idéntica y cuanto a la dirección de memoria, su contenido, etc; Por otro lado esto quiere decir que cualquier modificación que hagamos en la función al contenido de la referencia afectará de forma inmediata a las variables originales.
Para pasar valores por referencia a una función, solo se debe anteponer el símbolo &(ampersand) en el nombre de la variable que será la referencia de las variables originales, es decir, el prototipo de la nueva función intercambiar( ) que ahora trabaja con referencias, será:
	1
	void intercambiar(int &i , int &j ); //Protipo de la función para intercambiar los valores
Luego si solo agregamos este operador (el & se conoce también como operador de referencia), al programa anterior tal como se muestra a continuación, el uso de las variables será común y corriente, sin embargo cualquier cambio que se realice en ellas afectará directamente a las variables en el programa principal (función main( )), si compilamos y ejecutamos el siguiente código.
	1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
	#include <iostream>
 
using namespace std;
 
void intercambiar(int &i , int &j ); //Protipo de la función 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 función 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;
}
El resultado obtenido será el siguiente:
Entonces se puede notar como en esta ocasión si se vio afectado el contenido de las variables “originales” (aunque finalmente no está del todo bien decir originales ya que como habíamos comentado, en el fondo, las variables son las mismas al compartir la misma dirección en memoria).

Continuar navegando

Materiales relacionados

62 pag.
Apuntes curso C avanzado y C__

User badge image

Materiales Generales

42 pag.
5 pag.
1 Invest Punteros - Hector l

User badge image

Desafio PASSEI DIRETO