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

Преглед садржаја:

Anonim

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

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

  • Шта је позив методом вредности?
  • Шта је метода позивања референцом?
  • Пример позива методом вредности
  • Пример позива референтном методом
  • Позив према вредности у односу на позив по референци
  • Предности коришћења Цалл би валуе методе
  • Предности коришћења позива референтном методом
  • Мане употребе методе позива по вредности
  • Недостаци коришћења позива референтном методом

Шта је метода позива помоћу вредности?

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

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

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

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

Шта је метода позивања референцом?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Мане употребе методе позива по вредности

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

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

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

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

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