Különbség a hívás érték és a referencia hívás között

Tartalomjegyzék:

Anonim

A programozási nyelvekben a függvényeket kétféleképpen lehet meghívni: ezt hívják értékhívásnak és hívás referenciának.

Ebben az oktatóanyagban megtanulod,

  • Mi az a hívás érték módszerrel?
  • Mi az a Call by Reference módszer?
  • Példa hívás érték módszerrel
  • Példa hívásra referencia módszerrel
  • Érték szerinti hívás vs. referenciahívás
  • A Call by value módszer használatának előnyei
  • A referencia módszerrel történő hívás előnyei
  • A Call by value módszer használatának hátrányai
  • A Call by reference módszer használatának hátrányai

Mi az a Call by Value módszer?

Az értékenkénti hívás módszer egy argumentum értékét másolja a függvény formális paraméterébe. Ezért a fő függvény paraméterében végrehajtott változtatások nem befolyásolják az argumentumot.

Ebben a paraméter-továbbítási módszerben a tényleges paraméterek értékeit átmásoljuk a függvény formális paramétereibe, és a paramétereket különböző memóriahelyeken tároljuk. Tehát a funkciókban végrehajtott változtatások nem tükröződnek a hívó tényleges paramétereiben.

FŐ KÜLÖNBSÉG

  • A Call by value módszerben az eredeti érték nem módosul, míg a Call by reference módszerben az eredeti érték módosul.
  • Az Érték szerinti hívás során a változó egy példánya kerül átadásra, míg a Hivatkozás szerinti hívás során maga a változó kerül átadásra.
  • Az Érték szerinti hívás során a tényleges és formális argumentumok különböző memóriahelyeken jönnek létre, míg a hivatkozás szerinti hívásnál a tényleges és formális argumentumok ugyanabban a memóriahelyen jönnek létre.
  • Az értékenkénti hívás az alapértelmezett módszer olyan programozási nyelvekben, mint a C ++, PHP, Visual Basic NET és C #, míg a hivatkozás alapján történő hívás csak a Java nyelvet támogatja.
  • Érték szerinti hívás, a változók átadása egyszerű módszerrel történik, míg a Hívás referenciánál mutatók szükségesek a változók címének tárolásához.

Mi az a Call by Reference módszer?

A referencia módszerrel történő hívás az argumentum címét bemásolja a formális paraméterbe. Ebben a módszerben a címet a függvényhívásban használt tényleges argumentum elérésére használják. Ez azt jelenti, hogy a paraméterben végrehajtott változtatások megváltoztatják az átadás argumentumát.

Ebben a módszerben a memóriaallokáció megegyezik a tényleges paraméterekkel. A függvényben végzett összes műveletet a tényleges paraméter címén tárolt értéken hajtjuk végre, és a módosított értéket ugyanazon a címen tároljuk.

Példa egy hívás érték módszerre

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;}

Kimenet:

before function calling 10value is 11after function calling 1-0

Mivel a main () -ban deklarált változó különbözik az (x) változótól inkrementálisan (). Ebben a programban csak a változónevek hasonlítanak egymásra, de memóriacímük eltér és más memóriahelyeken vannak tárolva.

Példa a referencia módszerrel történő hívásra

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;}

Kimenet:

Before call Value of a =10After call Value of a =11

Mivel az „a” -nak deklarált változó a main () „a” változóra utal / mutat. Itt a változó neve különbözik, de mindkettő ugyanazokra a memóriacímekre mutat / utal.

Érték szerinti hívás vs. referenciahívás

Paraméterek Hívás érték szerint Hívás referenciával
Meghatározás Egy függvény meghívása közben, amikor értékeket ad át változók másolásával, az úgynevezett "Call By Values". A függvény meghívása közben a programozási nyelvben a változók értékeinek másolása helyett a változók címét használjuk. Ezt hívjuk "Hívás referenciákként".
Érvek Ebben a módszerben a változó egy példányát továbbítják. Ebben a módszerben magát a változót adják át.
Hatás A változó másolatában végrehajtott változtatások soha nem módosítják a függvényen kívüli változó értékét. A változó változása a függvényen kívüli változó értékét is befolyásolja.
Az érték megváltoztatása Nem teszi lehetővé a tényleges változók módosítását. Lehetővé teszi a változók értékeinek megváltoztatását függvényhívások használatával.
Változó átadása A változók értékeinek átadása egyszerű módszerrel történik. Mutatóváltozókra van szükség a változók címének tárolásához.
Értékmódosítás Az eredeti érték nincs módosítva. Az eredeti érték módosul.
Memória helye A tényleges és formális argumentumok különböző memóriahelyeken jönnek létre A tényleges és formális argumentumok ugyanabban a memóriahelyen jönnek létre
Biztonság A tényleges érvek biztonságban maradnak, mivel véletlenül nem módosíthatók. A tényleges érvek nem biztonságosak. Véletlenül módosíthatók, ezért gondosan kell kezelnie az argumentum műveleteket.
Alapértelmezett Alapértelmezés sok programozási nyelvben, például C ++. PHP. Visual Basic NET és C #. A legtöbb programozási nyelv, például a JAVA, támogatja, de nem alapértelmezettként.

A Call by value módszer használatának előnyei

A hívás előnyei / előnyei érték módszer szerint:

  • A módszer nem változtatja meg az eredeti változót, ezért adatokat őriz.
  • Amikor egy függvényt hívnak, soha ne befolyásolja a tényleges argumentumok tényleges tartalmát.
  • A hivatalos érveknek átadott tényleges érvek értéke, tehát a hivatalos érvben végrehajtott bármilyen változás nem befolyásolja a valós eseteket.

A referencia módszerrel történő hívás előnyei

Előnyök a referencia módszerrel történő hívás használatához:

  • A függvény megváltoztathatja az argumentum értékét, ami nagyon hasznos.
  • Nem hoz létre ismétlődő adatokat egyetlen érték tárolására, ami elősegíti a memóriaterület megtakarítását.
  • Ebben a módszerben nincs másolat a megtett érvről. Ezért nagyon gyorsan feldolgozzák.
  • Segít elkerülni a tévedésből végrehajtott változásokat
  • A kódot olvasó személy soha nem tudja, hogy az érték módosítható a függvényben.

A Call by value módszer használatának hátrányai

Az alábbiakban bemutatjuk a hívás érték módszerrel történő fő hátrányait / hátrányait:

  • A tényleges paraméterek módosítása a megfelelő argumentumváltozókat is módosíthatja
  • Ebben a módszerben az argumentumoknak változóknak kell lenniük.
  • A változót közvetlenül nem lehet megváltoztatni a függvénytörzsben.
  • Valamikor az érvelés összetett kifejezés lehet
  • Két példány készül ugyanarra a változóra, amely nem memória-hatékony.

A Call by reference módszer használatának hátrányai

Itt vannak a fő hivatkozások a referencia módszerrel történő hívás használatára:

  • Erős, nem null garancia. A referenciát befogadó függvénynek meg kell győződnie arról, hogy a bemenet nem null. Ezért nincs szükség semmilyen ellenőrzésre.
  • Hivatkozás útján a funkció elméletileg nem tiszta.
  • Az életre szóló garancia nagy probléma a referenciákkal. Ez különösen veszélyes, ha lambdákkal és többszálú programokkal dolgozunk.