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

Содержание:

Anonim

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

В этом руководстве вы узнаете,

  • Что такое метод вызова по значению?
  • Что такое метод вызова по ссылке?
  • Пример вызова по значению метода
  • Пример вызова ссылочным методом
  • Звонок по значению против звонка по ссылке
  • Преимущества использования метода вызова по значению
  • Преимущества использования метода вызова по ссылке
  • Недостатки использования метода вызова по значению
  • Недостатки использования метода вызова по ссылке

Что такое метод вызова по значению?

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

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

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

  • В методе вызова по значению исходное значение не изменяется, тогда как в методе вызова по ссылке изменяется исходное значение.
  • При вызове по значению передается копия переменной, тогда как при вызове по ссылке передается сама переменная.
  • При вызове по значению фактические и формальные аргументы будут созданы в разных местах памяти, тогда как при вызове по ссылке фактические и формальные аргументы будут созданы в одной и той же области памяти.
  • Вызов по значению является методом по умолчанию в таких языках программирования, как 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' в main (), отличается от переменной 'x' в increment (). В этой программе похожи только имена переменных, но их адреса в памяти различны и хранятся в разных местах памяти.

Пример вызова по ссылке метода

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, но не по умолчанию.

Преимущества использования метода вызова по значению

Плюсы / преимущества метода вызова по значению:

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

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

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

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

Недостатки использования метода вызова по значению

Вот основные минусы / недостатки метода вызова по значению:

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

Недостатки использования метода вызова по ссылке

Вот основные недостатки использования метода вызова по ссылке:

  • Сильная ненулевая гарантия. Функция, принимающая ссылку, должна убедиться, что ввод не равен нулю. Следовательно, нулевая проверка не требуется.
  • Передача по ссылке делает функцию не чистой теоретически.
  • Пожизненная гарантия - большая проблема со ссылками. Это особенно опасно при работе с лямбда-выражениями и многопоточными программами.