Llamada de C ++ por dirección y llamada por referencia

C Call Address



C ++ es un lenguaje de programación flexible de uso general. Fue creado originalmente por Bjarne Stroustrup, un científico informático danés, en 1985. C ++ admite métodos de paso de tres parámetros, es decir, llamada por valor, llamada por dirección y llamada por referencia. En este artículo, vamos a discutir sobre la llamada por dirección y el mecanismo de llamada por referencia.

¿Qué es una función?

Antes de pasar al tema real, debemos comprender cuál es la función en C ++. Es posible que muchos de ustedes ya estén familiarizados con las funciones.







Una función es básicamente un fragmento de código que se puede utilizar para realizar una determinada tarea. Una función se utiliza principalmente para reducir el código repetitivo en un programa C ++. Toma la entrada como parámetros y devuelve la salida como valor de retorno. Si definimos la función una vez, podemos llamarla / usarla varias veces en la parte posterior de nuestro programa. De esa forma, ahorramos mucho código repetitivo en el programa.



Cada programa de C ++ debe tener la función main (). La función main () es el punto de entrada para un programa C ++. Aparte de la función main (), el programador puede definir tantas funciones como desee.



Aquí está la sintaxis para definir una función:





Return_type Function_Name(Lista de parámetros de entrada)

La función en C ++ puede aceptar 0 o más parámetros de entrada, mientras que solo puede devolver un valor de retorno.

¿Qué es la dirección?

Hay dos tipos de variables en C ++ (similar al lenguaje C): variable de datos y variable de dirección. La variable de dirección se utiliza para almacenar la dirección de otra variable de datos. Por ejemplo, consideremos el siguiente fragmento de código:



En tI= 100;
En t *ptr= &I;

Aquí, la primera declaración nos dice que la variable i es una variable de datos y está almacenando el valor 100. En la segunda declaración, declaramos una variable de puntero, es decir, ptr, y la inicializamos con la dirección de la variable i.

¿Qué es la referencia?

La referencia es otra característica poderosa del lenguaje C ++. Consideremos el siguiente fragmento de código:

En ta= 200;
En t &r=a;

En este ejemplo, hemos declarado un número entero, es decir, ay luego declarado una variable de referencia r, que se inicializa con el valor de a. Entonces, la variable de referencia no es más que un alias de otra variable.

Métodos de paso de parámetros:

Hay tres tipos de métodos de paso de parámetros en lenguaje C ++:

  1. Llamar por valor / Pasar por valor
  2. Llamar por dirección / Pasar por dirección
  3. Llamar por referencia / Pasar por referencia

En este artículo, hablamos de: Llamar por dirección y Llamar por referencia.

¿Qué es Llamar por dirección / Pase por dirección?

En el caso del método Call by address / Pass by address, los argumentos de la función se pasan como dirección. La función de llamada pasa la dirección de los parámetros. Las variables de puntero se utilizan en la definición de la función. Con la ayuda del método Llamar por dirección, la función puede acceder a los parámetros reales y modificarlos. Veremos un ejemplo del método Llamar por dirección más adelante en la sección de este artículo.

¿Qué es Call By Reference / Pass by Reference?

En el método Call by reference / Pass by reference, los parámetros de la función se pasan como referencia. Dentro de la definición de la función, se accede a los parámetros reales utilizando la variable de referencia.

Ejemplos:

Ahora, dado que entendemos el concepto de métodos de paso de parámetros, veremos varios programas de ejemplo para comprender el mecanismo de paso de parámetros en C ++:

  1. Ejemplo-1 - Llamar por dirección (1)
  2. Ejemplo-2 - Llamar por dirección (2)
  3. Ejemplo-3 - Llamada por referencia (1)
  4. Ejemplo-4 - Llamada por referencia (2)

Los primeros dos ejemplos se dan para explicar cómo funciona el método Llamar por dirección en C ++. Los dos últimos ejemplos sirven para explicar el concepto de llamada por referencia.

Ejemplo-1 - Llamar por dirección (1)

En este ejemplo, vamos a demostrar el mecanismo de llamada por dirección. Desde la función main (), estamos llamando a la función hello () y pasando la dirección de var. En la definición de la función, estamos recibiendo la dirección de var en una variable de puntero, es decir, p. Dentro de la función hola, el valor de var se cambia a 200 con la ayuda del puntero. Por lo tanto, el valor de var se cambia a 200 dentro de la función main () después de la llamada a la función hello ().

#incluir
utilizando espacio de nombreshoras;

vacíoHola(En t *pag)
{
costo <<endl<< 'Dentro de la función hello ():' <<endl;
costo << 'Valor de * p =' << *pag<<endl;
*pag= 200;
costo << 'Valor de * p =' << *pag<<endl;
costo << 'Saliendo de la función hello ().' <<endl;
}

En tprincipal()
{
En tdónde= 100;
costo << 'Valor de var dentro de la función main () =' <<dónde<<endl;

Hola(&dónde);

costo <<endl<< 'Valor de var dentro de la función main () =' <<dónde<<endl;

regreso 0;
}

Ejemplo-2 - Llamar por dirección (2)

Este es otro ejemplo del método de llamada por dirección. En este ejemplo, vamos a explicar cómo se puede utilizar el método de llamada por dirección para resolver un problema de la vida real. Por ejemplo, queremos escribir una función para intercambiar dos variables. Si usamos el mecanismo de llamada por valor para intercambiar dos variables, las variables reales no se intercambian en la función de llamada. El método de llamada por dirección se puede utilizar en tal escenario. En este ejemplo, estamos pasando la dirección de var_1 (& var_1) y var_2 (& var_2) a la función mySwap (). Dentro de la función mySwap (), intercambiamos los valores de estas dos variables con la ayuda de los punteros. Como puede ver en el resultado a continuación, el valor real de estas variables se intercambia en la función main () después de que se ejecuta la función mySwap ().

#incluir
utilizando espacio de nombreshoras;

vacíomySwap(En t *vptr_1,En t *vptr_2)
{
En ttemp_var;
temp_var= *vptr_1;
*vptr_1= *vptr_2;
*vptr_2=temp_var;
}

En tprincipal()
{
En tvar_1= 100;
En tvar_2= 300;

costo << 'Antes de llamar a la función mySwap (), valor de var_1:' <<var_1<<endl;
costo << 'Antes de llamar a la función mySwap (), valor de var_2:' <<var_2<<endl<<endl;

costo << 'Llamar a la función mySwap () - Llamar por dirección.' <<endl<<endl;
mySwap(&var_1,&var_2);

costo << 'Después de llamar a la función mySwap (), valor de var_1:' <<var_1<<endl;
costo << 'Después de llamar a la función mySwap (), valor de var_2:' <<var_2<<endl;

regreso 0;
}

Ejemplo-3 - Llamada por referencia (1)

En este ejemplo, vamos a demostrar cómo funciona la llamada por referencia en C ++. En la definición de la función hello (), el valor se recibe como una variable de referencia (& p). Con la ayuda de la variable de referencia (es decir, p), podemos cambiar el valor del parámetro real (var) dentro de la función main ().

#incluir
utilizando espacio de nombreshoras;

vacíoHola(En t &pag)
{
costo <<endl<< 'Dentro de la función hello ():' <<endl;
costo << 'Valor de p =' <<pag<<endl;
pag= 200;
costo << 'Valor de p =' <<pag<<endl;
costo << 'Saliendo de la función hello ().' <<endl;
}

En tprincipal()
{
En tdónde= 100;
costo << 'Valor de var dentro de la función main () =' <<dónde<<endl;

Hola(dónde);

costo <<endl<< 'Valor de var dentro de la función main () =' <<dónde<<endl;

regreso 0;
}

Ejemplo-4 - Llamada por referencia (2)

Este es otro ejemplo de una llamada por referencia. En este ejemplo, vamos a demostrar cómo funciona la llamada por referencia en C ++ con la ayuda de un ejemplo del mundo real. La función mySwap () se llama desde la función main () con los siguientes parámetros: var_1 y var_2. Dentro de la función mySwap (), estamos recibiendo los parámetros como variables de referencia.

#incluir
utilizando espacio de nombreshoras;

vacíomySwap(En t &vref_1,En t &vref_2)
{
En ttemp_var;
temp_var=vref_1;
vref_1=vref_2;
vref_2=temp_var;
}

En tprincipal()
{
En tvar_1= 100;
En tvar_2= 300;

costo << 'Antes de llamar a la función mySwap (), valor de var_1:' <<var_1<<endl;
costo << 'Antes de llamar a la función mySwap (), valor de var_2:' <<var_2<<endl<<endl;

costo << 'Llamar a la función mySwap () - Llamar por referencia.' <<endl<<endl;
mySwap(var_1, var_2);

costo << 'Después de llamar a la función mySwap (), valor de var_1:' <<var_1<<endl;
costo << 'Después de llamar a la función mySwap (), valor de var_2:' <<var_2<<endl;

regreso 0;
}

Conclusión

Comprender los métodos de paso de parámetros en C++ es muy importante. El lenguaje de programación C solo admite la llamada por valor y la llamada por dirección. Pero, C ++ admite la llamada por referencia junto con los dos mecanismos anteriores. En este artículo, hemos visto varios ejemplos prácticos para comprender el concepto de llamada por dirección y llamada por referencia. La llamada por dirección es un método muy poderoso y popular en aplicaciones de dominio integradas.