Что такое звонок по значению и звонок по референции?

2 Ответы


  • Есть два способа передачи аргументов / параметров функции. Один метод - это вызов по значению, а другой - вызов по ссылке.
    Вызов по значению: в вызове по значению программа отправляет копию аргумента / параметра функции. Программист не передает фактическую переменную. Поскольку в функцию передается только копия переменной, любые изменения / модификации, сделанные внутри функции, не влияют на переменную, и значение переменной остается неизменным после вызова функции.
    Следующий пример поясняет это;
    Предположим, что a = 2 перед вызовом функции
    Void function (int a)
    {
    a = a + a;
    а = а - 5;
    }
    Поскольку в функцию передается только копия переменной «a», поэтому даже после вызова функции значение a останется 2.
    Вызов по ссылке: при вызове по ссылке в функцию передается адрес аргумента / параметра. Проще говоря, в функцию передается фактическая переменная или указатель, и значение переменной может быть изменено / модифицировано внутри функции.
    Например; предположим, что a = 2 перед вызовом функции.
    После передачи этого значения в функцию типа
    Void function (int & a)
    {
    * a = * a + * a;
    * а = * а - 5;
    }
    После вызова этой функции значение a станет "1".
  • Аргументы, передаваемые функции, могут быть двух типов, а именно

    1. Переданные значения
    2. Переданный адрес

    Первый тип относится к вызову по значению, а второй тип относится к вызову по ссылке.

    Например, рассмотрим program1

    main ()
    {
    int x = 50, y = 70;
    обмен (x, y);
    printf («x =% dy =% d», x, y);
    }

    interchange (x1, y1)
    int x1, y1;
    {
    int z1;
    z1 = x1;
    х1 = у1;
    y1 = z1;
    printf («x1 =% d y1 =% d», x1, y1);
    }

    Здесь значение функции обмена передается по значению.

    Рассмотрим program2

    main ()
    {
    int x = 50, y = 70;
    обмен (& x, & y);
    printf («x =% dy =% d», x, y);
    }

    interchange (x1, y1)
    int * x1, * y1;
    {
    int z1;
    z1 = * x1;
    * х1 = * у1;
    * y1 = z1;
    printf («* x =% d * y =% d», x1, y1);
    }

    Здесь функция вызывается по ссылке. Другими словами, адрес передается с помощью символа &, а доступ к значению осуществляется с помощью символа *.

    Основное различие между ними можно увидеть, проанализировав вывод program1 и program2.

    Результат вызова программы 1 по значению:

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

    Но результат вызова программы 2 по ссылке:

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

    Это потому, что в случае вызова по значению значение передается в функцию с именем interchange и там значение поменялось местами и было напечатано как

    x1 = 70 y1 = 50

    и снова, поскольку значения не возвращаются, и поэтому исходные значения x и y, как в основной функции, а именно

    x = 50 y = 70, были напечатаны.

Напишите свой ответ

Ваш ответ появится после модерации