Разлика између позива према вредности и позива према референци

У програмским језицима функције се могу позвати на два начина: који је познат као Позив по вредности и Позив по референци.

У овом водичу ћете научити,

Шта је метода Цалл би Валуе?

Метод позива по вредности копира вредност аргумента у формални параметар те функције. Због тога промене у параметру главне функције не утичу на аргумент.

У овом начину преноса параметара, вредности стварних параметара се копирају у формалне параметре функције, а параметри се чувају на различитим меморијским локацијама. Дакле, све промене направљене унутар функција не одражавају се на стварне параметре позиваоца.

КЉУЧНА РАЗЛИКА

  • У методу Позив према вредности оригинална вредност се не мења, док се у Позиву према методи полазишта оригинална вредност мења.
  • У Позиву по вредности, копија променљиве се прослеђује, док се у Позиву по позиву прослеђује сама променљива.
  • У позиву по вредности стварни и формални аргументи ће се креирати на различитим меморијским локацијама, док ће у позиву позивом стварни и формални аргументи бити креирани на истој меморијској локацији.
  • Позив према вредности је подразумевани метод у програмским језицима као што су Ц ++, ПХП, Висуал Басиц НЕТ и Ц#, док је позив по референци подржан само у Јава језику.
  • Позив по вредности, променљиве се прослеђују једноставном методом док су Позиви по референци, показивачи потребни за чување адресе променљивих.

Шта је метода Цалл би Референце?

Позив методом референције копира адресу аргумента у формални параметар. У овој методи адреса се користи за приступ стварном аргументу који се користи у позиву функције. То значи да промене направљене у параметру мењају пролазни аргумент.

У овој методи, алокација меморије је иста као и стварни параметри. Све операције у функцији се изводе на вредности која је сачувана на адреси стварног параметра, а измењена вредност ће бити ускладиштена на истој адреси.

Пример методе Цалл би Валуе

 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 10 value is 11 after function calling 1-0 

Пошто се променљива која је декларисана као 'а'ин маин () разликује од променљиве' к 'у инкременту (). У овом програму само су имена променљивих слична, али су њихове меморијске адресе различите и чувају се на различитим меморијским локацијама.

Пример методе Цалл би Референце

 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 =10 After call Value of a =11 

Пошто се променљива декларисана као „а“ у референцира/ указује на променљиву „а“ у маин (). Овде се назив променљиве разликује, али обе показују/упућују на исте локације адреса меморије.

Позив према вредности у односу на позив према референци

Параметри Позив према вредности Позовите по референци
ДефиницијаДок позивате функцију, када преносите вредности копирањем променљивих, она је позната као „Позив према вредностима“.Приликом позивања функције, у програмском језику, уместо копирања вредности променљивих, користи се адреса променљивих која је позната као 'Цалл Би Референцес'.
АргументсУ овој методи се преноси копија променљиве.У овој методи се преноси сама променљива.
ЕфекатПромене направљене у копији променљиве никада не мењају вредност променљиве изван функције.Промена променљиве такође утиче на вредност променљиве ван функције.
Промена вредностиНе дозвољава вам да унесете било какве промене у стварне променљиве.Омогућава вам да промените вредности променљивих помоћу позива функција.
Доношење променљивеВредности променљивих се прослеђују једноставном методом.Променљиве показивача су потребне за складиштење адресе променљивих.
Модификација вредностиОригинална вредност није измењена.Оригинална вредност се мења.
Локација меморијеСтварни и формални аргументи ће се креирати на различитим локацијама меморијеСтварни и формални аргументи ће се креирати на истој меморијској локацији
СигурностСтварни аргументи остају сигурни јер се не могу случајно изменити.Стварни аргументи нису сигурни. Они се могу случајно изменити, па морате пажљиво руковати операцијама аргумената.
УобичајеноПодразумевано у многим програмским језицима као што је Ц ++. ПХП. Висуал Басиц НЕТ и Ц#.Подржава га већина програмских језика попут ЈАВА -е, али не као задани.

Предности коришћења методе Цалл би валуе

Предности и предности позива према методи вредности:

  • Метод не мења оригиналну променљиву, па чува податке.
  • Кад год се функција позове, никада немојте утицати на стварни садржај стварних аргумената.
  • Вредност стварних аргумената прослеђених формалним аргументима, тако да све промене направљене у формалном аргументу не утичу на стварне случајеве.

Предности коришћења позива референтном методом

Предности коришћења позива референтном методом:

  • Функција може променити вредност аргумента, што је прилично корисно.
  • Не ствара дупликате података који држе само једну вредност што вам помаже да уштедите меморијски простор.
  • У овој методи нема копије изнетог аргумента. Због тога се обрађује врло брзо.
  • Помаже вам да избегнете грешке извршене
  • Особа која чита код никада не зна да се вредност може променити у функцији.

Недостаци коришћења методе Цалл би валуе

Ево главних недостатака/недостатака позива према методу вредности:

  • Промене стварних параметара такође могу изменити одговарајуће променљиве аргумента
  • У овој методи аргументи морају бити променљиве.
  • Не можете директно променити променљиву у телу функције.
  • Понекад аргумент може бити сложен израз
  • За исту променљиву су направљене две копије које не штеде меморију.

Недостаци коришћења позива референтном методом

Ево главних недостатака коришћења позива референтном методом:

  • Јака гаранција која није нула. Функција која узима референцу мора се побринути да улаз није нулл. Због тога не мора да се врши нула провера.
  • Пролазак референцом чини да функција није теоретски чиста.
  • Доживотна гаранција је велики проблем са референцама. Ово је посебно опасно при раду са ламбдама и програмима са више нити.