¿Qué es llamada por valor y llamada por referencia?

2 Respuestas


  • Hay dos formas de pasar argumentos / parámetros a una función. Un método es Llamar por valor y el otro método es Llamar por referencia.
    Llamada por valor: en la llamada por valor, la programación envía la copia de un argumento / parámetro a una función. El programador no está pasando la variable real. Dado que solo la copia de la variable se pasa a la función, cualquier cambio / modificación realizado dentro de una función no afecta la variable y el valor de la variable permanece igual después de la llamada a la función.
    El siguiente ejemplo lo aclarará;
    Suponga que a = 2 antes de la llamada a la función
    Void function (int a)
    {
    a = a + a;
    a = a - 5;
    }
    Dado que solo se pasa una copia de la variable "a" a la función, es por eso que incluso después de la llamada a la función, el valor de a seguirá siendo 2.
    Llamada por referencia: en la llamada por Referencia, la dirección del argumento / parámetro se pasa a la función. En palabras simples, la variable real o un puntero se pasa a la función y el valor de la variable se puede cambiar / modificar dentro de una función.
    Por ejemplo; suponga que a = 2 antes de la llamada a la función
    Después de pasar este valor a una función como
    Void function (int & a)
    {
    * a = * a + * a;
    * a = * a - 5;
    }
    El valor de a se convertirá en "1" después de llamar a esta función.
  • Los argumentos pasados ​​a la función pueden ser de dos tipos:

    1. Valores pasados
    2. Dirección transferida

    El primer tipo se refiere a la llamada por valor y el segundo tipo se refiere a la llamada por referencia.

    Por ejemplo, considere program1

    main ()
    {
    int x = 50, y = 70;
    intercambio (x, y);
    printf ("x =% dy =% d", x, y);
    }

    intercambio (x1, y1)
    int x1, y1;
    {
    int z1;
    z1 = x1;
    x1 = y1;
    y1 = z1;
    printf ("x1 =% d y1 =% d", x1, y1);
    }

    Aquí el intercambio de valor a función se pasa por valor.

    Considere program2

    main ()
    {
    int x = 50, y = 70;
    intercambio (& x, & y);
    printf ("x =% dy =% d", x, y);
    }

    intercambio (x1, y1)
    int * x1, * y1;
    {
    int z1;
    z1 = * x1;
    * x1 = * y1;
    * y1 = z1;
    printf ("* x =% d * y =% d", x1, y1);
    }

    Aquí la función se llama por referencia. En otras palabras, la dirección se pasa usando el símbolo & y se accede al valor usando el símbolo *.

    La principal diferencia entre ellos se puede ver analizando la salida de program1 y program2.

    La salida del programa1 que se llama por valor es

    x1 = 70 y1 = 50
    x = 50 y = 70

    Pero la salida del programa2 que es llamada por referencia es

    * x = 70 * y = 50
    x = 70 y = 50

    Esto se debe a que en el caso de la llamada por valor, el valor se pasa a la función nombrada como intercambio y allí, el valor se intercambió y se imprimió como

    x1 = 70 y1 = 50

    y nuevamente, ya que no se devuelven valores y, por lo tanto,

    se imprimieron los valores originales de xey como en la función principal, a saber, x = 50 y = 70.

Escribe tu respuesta

Tu respuesta aparecerá después de la moderación