Різниця між дзвінком за вартістю та дзвінком за посиланням

Зміст:

Anonim

У мовах програмування функції можна викликати двома способами: що називається "Виклик за значенням" та "Виклик за посиланням".

У цьому підручнику ви дізнаєтесь,

  • Що таке виклик методом значення?
  • Що таке метод виклику за допомогою посилання?
  • Приклад виклику методом значення
  • Приклад виклику за допомогою посилального методу
  • Дзвінок за вартістю проти дзвінка за посиланням
  • Переваги використання методу Call за значенням
  • Переваги використання виклику за допомогою довідкового методу
  • Недоліки використання методу Call за значенням
  • Недоліки використання виклику за допомогою еталонного методу

Що таке метод виклику за значенням?

Метод виклику за значенням копіює значення аргументу у формальний параметр цієї функції. Тому зміни, внесені до параметра основної функції, не впливають на аргумент.

У цьому методі передачі параметрів значення фактичних параметрів копіюються у формальні параметри функції, і параметри зберігаються в різних місцях пам'яті. Таким чином, будь-які зміни, внесені всередину функцій, не відображаються в реальних параметрах абонента.

КЛЮЧОВА РІЗНИЦЯ

  • У методі виклику за значенням вихідне значення не змінюється, тоді як у методі виклику за допомогою посилання вихідне значення змінюється.
  • У виклику за значенням передається копія змінної, тоді як у виклику за посиланням передається сама змінна.
  • У виклику за значенням фактичні та формальні аргументи будуть створені в різних місцях пам'яті, тоді як у виклику за посиланням фактичні та офіційні аргументи будуть створені в одному і тому ж місці пам'яті.
  • Виклик за значенням є методом за замовчуванням у мовах програмування, таких як C ++, PHP, Visual Basic NET та C #, тоді як дзвінок за посиланням підтримується лише мовою Java.
  • Виклик за значенням, змінні передаються за допомогою прямолінійного методу, тоді як для виклику за посиланням вказівники потрібні для зберігання адреси змінних.

Що таке метод виклику за допомогою посилання?

Виклик методом посилання копіює адресу аргументу у формальний параметр. У цьому методі адреса використовується для доступу до фактичного аргументу, що використовується у виклику функції. Це означає, що зміни, внесені в параметр, змінюють аргумент, що передається.

У цьому методі розподіл пам’яті збігається з фактичними параметрами. Усі операції у функції виконуються над значенням, що зберігається за адресою фактичного параметра, а змінене значення буде зберігатися за тією ж адресою.

Приклад методу виклику за значенням

void main() {int a = 10,void increment(int);Cout << "before function calling" << a;increment(a);Cout << "after function calling" << a;getch();void increment(int x) {int x = x + 1;Cout << "value is" << x;}

Вихід:

before function calling 10value is 11after function calling 1-0

Оскільки змінна, оголошена 'a'in main (), відрізняється від змінної' x 'у прирості (). У цій програмі подібні лише імена змінних, але їхні адреси пам'яті різні і зберігаються в різних місцях пам'яті.

Приклад виклику методом посилання

Public static void(string args[]) {int a = 10;System.out.println("Before call Value of a = ", a);Void increment();System.out.println("After call Value of a = ", a);}Void increment(int x) {int x = x + 1;}

Вихід:

Before call Value of a =10After call Value of a =11

Оскільки змінна, оголошена "a" у, є посиланням / вказівкою на змінну "a" у main (). Тут ім'я змінної відрізняється, але обидва вони вказують / посилаються на однакові адреси пам'яті.

Дзвінок за вартістю проти дзвінка за посиланням

Параметри Дзвінок за значенням Телефонуйте за посиланням
Визначення Під час виклику функції, коли ви передаєте значення шляхом копіювання змінних, вона відома як "Виклик за значеннями". Під час виклику функції в мові програмування замість копіювання значень змінних використовується адреса змінних, яка відома як "Виклик за посиланнями".
Аргументи У цьому методі передається копія змінної. У цьому методі передається сама змінна.
Ефект Зміни, внесені в копію змінної, ніколи не змінюють значення змінної поза функцією. Зміна змінної також впливає на значення змінної поза функцією.
Зміна вартості Не дозволяє вносити зміни в фактичні змінні. Дозволяє вносити зміни у значення змінних за допомогою викликів функцій.
Передача змінної Значення змінних передаються за допомогою прямолінійного методу. Вказівники змінні необхідні для зберігання адреси змінних.
Модифікація значення Вихідне значення не змінено. Вихідне значення змінено.
Розташування пам'яті Фактичні та офіційні аргументи будуть створюватися в різних місцях пам'яті Фактичні та офіційні аргументи будуть створені в одному і тому ж місці пам'яті
Безпека Фактичні аргументи залишаються безпечними, оскільки їх неможливо випадково змінити. Фактичні аргументи не є безпечними. Вони можуть бути випадково змінені, тому вам потрібно обережно обробляти операції з аргументами.
За замовчуванням За замовчуванням у багатьох мовах програмування, таких як C ++. PHP. Visual Basic NET та C #. Це підтримується більшістю мов програмування, таких як JAVA, але не за замовчуванням.

Переваги використання методу Call за значенням

Плюси / переваги виклику методом вартості:

  • Метод не змінює вихідну змінну, тому зберігає дані.
  • Кожного разу, коли функцію викликають, ніколи не впливайте на фактичний зміст фактичних аргументів.
  • Значення фактичних аргументів, переданих офіційним аргументам, тому будь-які зміни, внесені до офіційного аргументу, не впливають на реальні справи.

Переваги використання виклику за допомогою довідкового методу

Плюси використання виклику за допомогою посилального методу:

  • Функція може змінювати значення аргументу, що є досить корисним.
  • Це не створює дублікатів даних для зберігання лише одного значення, що допомагає заощадити місце в пам'яті.
  • У цьому методі немає копії аргументу. Тому він обробляється дуже швидко.
  • Допомагає уникнути помилок, внесених помилково
  • Людина, яка читає код, ніколи не знає, що значення можна змінити у функції.

Недоліки використання методу Call за значенням

Ось основні мінуси / недоліки виклику методом значення:

  • Зміни фактичних параметрів також можуть модифікувати відповідні змінні аргументу
  • У цьому методі аргументи повинні бути змінними.
  • Ви не можете безпосередньо змінити змінну в тілі функції.
  • Іноді аргументом можуть бути складні вирази
  • Існує дві копії, створені для однієї і тієї ж змінної, що не є ефективним для пам'яті.

Недоліки використання виклику за допомогою еталонного методу

Ось основні мінуси використання виклику за допомогою посилального методу:

  • Потужна ненульова гарантія. Функція, яка приймає посилання, повинна переконатися, що введення не є нульовим. Отже, перевірка на нуль не потрібно робити.
  • Передача посилання робить функцію теоретично не чистою.
  • Довічна гарантія - це велика проблема зі посиланнями. Це особливо небезпечно при роботі з лямбда і багатопоточними програмами.