Вызов по ссылке против вызова по значению: разница и сравнение

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

Параметры, которые в них используются, называются фактическими параметрами. Они используются во многих языках программирования, таких как C, C++ и Java.

Основные выводы

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

Вызов по ссылке против вызова по значению

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

Вызов по ссылке против вызова по значению

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

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

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

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

Сравнительная таблица

Параметры сравненияЗвонок по ссылкеЗвонок по значению
ТехнологияПеременная передается.Копия переменной передается.
Значение переменнойВнесенные изменения повлияют на функцию снаружи.Внесенные изменения не повлияют на функцию снаружи.
Исходное значениеОн модифицирован.Он не изменен.
СохранностьРеальные аргументы небезопасны.Настоящие аргументы безопасны.
ОпределениеОн использует саму переменную для передачи.Он использует копию переменной для передачи.

Что такое вызов по ссылке?

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

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

Он не будет создавать дубликаты данных, так как содержит только одно значение, поэтому может спасти пространство памяти. Если человек прочитает код, он не сможет найти, не изменены ли значения в этом коде.

В этом методе пожизненная гарантия является большой проблемой. Это станет опасным, если вы работаете с многопоточными программами и лямбда-выражениями. Чтобы объявить вызов по ссылке, вы должны передать адрес.

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

Если вы знаете конкретный статус элемента данных, вызовите метод по ссылке perfect. Изменение копии данных не принесет ничего полезного.

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

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

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

Это объясняет, что в значение не вносятся изменения, даже если они изменяются внутри функции. В Ява, вызов метода по значению означает вызов метода с его параметром в качестве значения.

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

Этот метод лучше всего, потому что исходное значение не изменяется. Но вы не можете вносить какие-либо изменения в фактические переменные. Фактические аргументы в этом методе будут в безопасности, так как вы не сможете случайно внести какие-либо изменения. 

Этот метод сохраняет данные, поскольку они не изменяют исходную переменную. Здесь аргументы являются переменными. Изменение переменной в теле функции не является прямым. Сложные выражения иногда могут работать как аргументы.

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

Основные различия между вызовом по ссылке и вызовом по значению

  1. Исходное значение изменяется при вызове по ссылке. С другой стороны, при вызове по значению исходное значение не изменяется.
  2. Вызов по ссылке поддерживается языками программирования, но не используется по умолчанию. С другой стороны, вызов по значению работает по умолчанию в языках программирования.
  3. В вызове по ссылке любые изменения, внесенные в переменную, также повлияют на переменную вне функции. С другой стороны, при вызове по значению любые изменения, сделанные в переменной, не повлияют на переменную вне функции.
  4. Вызов по ссылке позволяет вносить изменения в значение переменной. С другой стороны, вызов по значению не позволит вам вносить изменения.
  5. При вызове по ссылке будет передан адрес значения. Но при вызове по ссылке будет передана копия значения. 
Рекомендации
  1. https://www.jstor.org/stable/3857812
  2. ftp://prog.vub.ac.be/education/EMOOSE/ReuseSlides/merge-papers/Jackson&al1994-semanticDiff.pdf

Последнее обновление: 22 июля 2023 г.

точка 1
Один запрос?

Я приложил столько усилий, чтобы написать этот пост в блоге, чтобы предоставить вам ценность. Это будет очень полезно для меня, если вы подумаете о том, чтобы поделиться им в социальных сетях или со своими друзьями/родными. ДЕЛИТЬСЯ ♥️

Оставьте комментарий

Хотите сохранить эту статью на потом? Нажмите на сердечко в правом нижнем углу, чтобы сохранить в свой собственный блок статей!