Разница между вызовом по значению и вызовом по ссылке

Опубликовано: 30 Декабря, 2021

Функции можно вызывать двумя способами: вызов по значению или вызов по ссылке . Эти два способа обычно различаются типом значений, передаваемых им в качестве параметров.

Параметры, переданные в функцию, называются фактическими параметрами, тогда как параметры, полученные функцией, называются формальными параметрами .

Вызов по значению : в этом методе передачи параметров значения фактических параметров копируются в формальные параметры функции, и два типа параметров хранятся в разных местах памяти. Таким образом, любые изменения, внесенные внутри функций, не отражаются в фактических параметрах вызывающего.

Вызов по ссылке : как фактические, так и формальные параметры относятся к одним и тем же местоположениям, поэтому любые изменения, внесенные внутри функции, фактически отражаются в фактических параметрах вызывающего.

Звонок по значению Звоните по ссылке
При вызове функции мы передаем ей значения переменных. Такие функции известны как «Вызов по значениям». При вызове функции вместо передачи значений переменных мы передаем адрес переменных (расположение переменных) в функцию, известную как «Вызов по ссылкам».
В этом методе значение каждой переменной в вызывающей функции копируется в соответствующие фиктивные переменные вызываемой функции. В этом методе адреса фактических переменных в вызывающей функции копируются в фиктивные переменные вызываемой функции.
С помощью этого метода изменения, внесенные в фиктивные переменные в вызываемой функции, не влияют на значения фактических переменных в вызывающей функции. С помощью этого метода, используя адреса, у нас будет доступ к фактическим переменным и, следовательно, мы сможем ими манипулировать.
// C программа для иллюстрации
// вызов по значению

#включают

// Прототип функции
void swapx (int x, int y);

// Основная функция
int main ()
{
    int a = 10, b = 20;

    // Передаем по значениям
    swapx (а, б);

    printf ("a =% db =% d  n", a, b);

    возврат 0;
}

// Своп функции, которые меняют местами
// два значения
void swapx (интервал x, интервал y)
{
    int t;

    т = х;
    х = у;
    у = т;

    printf ("x =% dy =% d  n", x, y);
}


Выход:
х = 20 у = 10
а = 10 б = 20
// C программа для иллюстрации
// Вызов по ссылке

#включают

// Прототип функции
void swapx (int *, int *);

// Основная функция
int main ()
{
    int a = 10, b = 20;

    // Передаем ссылку
    swapx (& a, & b);

    printf ("a =% db =% d  n", a, b);

    возврат 0;
}

// Функция для замены двух переменных
// по ссылкам
недействительный swapx (int * x, int * y)
{
    int t;

    т = * х;
    * х = * у;
    * y = t;

    printf ("x =% dy =% d  n", * x, * y);
}

Выход:
х = 20 у = 10
а = 20 б = 10