В языках программирования функции можно вызывать двумя способами: это называется вызовом по значению и вызовом по ссылке.
В этом руководстве вы узнаете,
- Что такое метод вызова по значению?
- Что такое метод вызова по ссылке?
- Пример вызова по значению метода
- Пример вызова ссылочным методом
- Звонок по значению против звонка по ссылке
- Преимущества использования метода вызова по значению
- Преимущества использования метода вызова по ссылке
- Недостатки использования метода вызова по значению
- Недостатки использования метода вызова по ссылке
Что такое метод вызова по значению?
Метод вызова по значению копирует значение аргумента в формальный параметр этой функции. Следовательно, изменения, внесенные в параметр основной функции, не влияют на аргумент.
В этом методе передачи параметров значения фактических параметров копируются в формальные параметры функции, а параметры сохраняются в разных местах памяти. Таким образом, любые изменения, внесенные внутри функций, не отражаются в фактических параметрах вызывающего.
КЛЮЧЕВАЯ РАЗНИЦА
- В методе вызова по значению исходное значение не изменяется, тогда как в методе вызова по ссылке изменяется исходное значение.
- При вызове по значению передается копия переменной, тогда как при вызове по ссылке передается сама переменная.
- При вызове по значению фактические и формальные аргументы будут созданы в разных местах памяти, тогда как при вызове по ссылке фактические и формальные аргументы будут созданы в одной и той же области памяти.
- Вызов по значению является методом по умолчанию в таких языках программирования, как 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, но не по умолчанию. |
Преимущества использования метода вызова по значению
Плюсы / преимущества метода вызова по значению:
- Метод не изменяет исходную переменную, поэтому сохраняет данные.
- Когда бы ни вызывалась функция, никогда не влияйте на фактическое содержимое фактических аргументов.
- Значение фактических аргументов передается формальным аргументам, поэтому любые изменения, внесенные в формальный аргумент, не влияют на реальные случаи.
Преимущества использования метода вызова по ссылке
Плюсы использования метода вызова по ссылке:
- Функция может изменять значение аргумента, что весьма полезно.
- Он не создает повторяющиеся данные для хранения только одного значения, что помогает вам сэкономить место в памяти.
- В этом методе нет копии сделанного аргумента. Поэтому обрабатывается очень быстро.
- Помогает избежать изменений, сделанных по ошибке
- Человек, читающий код, никогда не знает, что значение можно изменить в функции.
Недостатки использования метода вызова по значению
Вот основные минусы / недостатки метода вызова по значению:
- Изменения фактических параметров также могут изменять соответствующие переменные аргумента.
- В этом методе аргументы должны быть переменными.
- Вы не можете напрямую изменить переменную в теле функции.
- Иногда аргумент может быть сложным выражением
- Для одной и той же переменной создаются две копии, что неэффективно с точки зрения памяти.
Недостатки использования метода вызова по ссылке
Вот основные недостатки использования метода вызова по ссылке:
- Сильная ненулевая гарантия. Функция, принимающая ссылку, должна убедиться, что ввод не равен нулю. Следовательно, нулевая проверка не требуется.
- Передача по ссылке делает функцию не чистой теоретически.
- Пожизненная гарантия - большая проблема со ссылками. Это особенно опасно при работе с лямбда-выражениями и многопоточными программами.