Apel C ++ după adresă și apel prin referință

C Call Address



C ++ este un limbaj de programare flexibil de uz general. A fost inițial creat de Bjarne Stroustrup, un informatic danez, în 1985. C ++ acceptă metode de trecere cu trei parametri, adică apelare după valoare, apelare după adresă și apelare prin referință. În acest articol, vom discuta despre apel prin adresă și apel prin mecanism de referință.

Ce este o funcție?

Înainte de a intra în subiectul real, trebuie să înțelegem care este funcția în C ++. Este posibil ca mulți dintre voi să fie deja familiarizați cu funcțiile.







O funcție este practic o bucată de cod care poate fi utilizată pentru a efectua o anumită sarcină. O funcție este utilizată în principal pentru a reduce codul repetitiv într-un program C ++. Ia intrarea ca parametri și returnează ieșirea ca valoare returnată. Dacă definim funcția o singură dată, o putem apela / folosi de mai multe ori în ultima parte a programului nostru. În acest fel, economisim o mulțime de coduri repetitive în program.



Fiecare program C ++ va avea funcția main (). Funcția main () este punctul de intrare pentru un program C ++. În afară de funcția main (), programatorul poate defini câte funcții dorește.



Iată sintaxa definirii unei funcții:





Return_type Function_Name(Lista parametrilor de intrare)

Funcția în C ++ poate accepta un număr de 0 sau mai mulți parametri de intrare, în timp ce poate returna o singură valoare returnată.

Ce este adresa?

Există două tipuri de variabile în C ++ (similar cu limbajul C) - Variabila de date și Variabila de adresă. Variabila adresă este utilizată pentru a stoca adresa altei variabile de date. De exemplu, să luăm în considerare următorul fragment de cod:



inteu= 100;
int *ptr= &eu;

Aici, prima afirmație ne spune că variabila i este o variabilă de date și stochează valoarea 100. În a doua afirmație declarăm o variabilă pointer, adică ptr și o inițializăm cu adresa variabilei i.

Ce este Reference?

Referința este o altă caracteristică puternică a limbajului C ++. Să luăm în considerare următorul fragment de cod:

intla= 200;
int &r=la;

În acest exemplu, am declarat un număr întreg, adică a și apoi am declarat o variabilă de referință r, care este inițializată cu valoarea lui a. Deci, variabila de referință nu este altceva decât un alias al altei variabile.

Metode de trecere a parametrilor:

Există trei tipuri de metode de trecere a parametrilor în limbajul C ++:

  1. Apelați după valoare / Treceți după valoare
  2. Apelați după adresă / Treceți după adresă
  3. Apelați prin referință / Treceți prin referință

În acest articol, discutăm despre - Apel după adresă și Apel prin referință.

Ce este Apel după adresă / Trecere prin adresă?

În cazul metodei Apel după adresă / Trecere prin adresă, argumentele funcției sunt transmise ca adresă. Funcția apelant trece adresa parametrilor. Variabilele pointer sunt utilizate în definiția funcției. Cu ajutorul metodei Apel prin adresă, funcția poate accesa parametrii reali și îi poate modifica. Vom vedea un exemplu al metodei Apel prin adresă mai târziu în acest articol.

Ce este Apel prin referință / Trecere prin referință?

În metoda Apel prin referință / Treceți prin referință, parametrii funcției sunt trecuți ca referință. În cadrul definiției funcției, parametrii reali sunt accesați utilizând variabila de referință.

Exemple:

Acum, deoarece înțelegem conceptul de metode de trecere a parametrilor, vom vedea câteva exemple de programe pentru a înțelege mecanismul de trecere a parametrilor în C ++:

  1. Exemplu-1 - Apel după adresă (1)
  2. Exemplu-2 - Apel după adresă (2)
  3. Exemplu-3 - Apel prin referință (1)
  4. Exemplu-4 - Apel prin referință (2)

Primele două exemple sunt date pentru a explica modul în care funcționează metoda Apel prin adresă în C ++. Ultimele două exemple sunt pentru a explica apelul prin conceptul de referință.

Exemplu-1 - Apel după adresă (1)

În acest exemplu, vom demonstra apelul prin mecanism de adresă. Din funcția main (), apelăm funcția hello () și trecem adresa var. În definiția funcției, primim adresa lui var într-o variabilă pointer, adică p. În interiorul funcției hello, valoarea lui var este schimbată la 200 cu ajutorul indicatorului. Prin urmare, valoarea lui var se schimbă la 200 în funcția main () după apelul de funcție hello ().

#include
folosind spațiu de numeore;

nulBuna ziua(int *p)
{
cost <<endl<< Funcția Inside hello (): <<endl;
cost << „Valoarea * p =” << *p<<endl;
*p= 200;
cost << „Valoarea * p =” << *p<<endl;
cost << „Ieșirea din funcția hello ().” <<endl;
}

intprincipal()
{
intUnde= 100;
cost << „Valoarea var în funcția main () =” <<Unde<<endl;

Buna ziua(&Unde);

cost <<endl<< „Valoarea var în funcția main () =” <<Unde<<endl;

întoarcere 0;
}

Exemplu-2 - Apel după adresă (2)

Acesta este un alt exemplu al metodei apelului prin adresă. În acest exemplu, vom explica cum metoda apelului prin adresă poate fi utilizată pentru a rezolva o problemă din viața reală. De exemplu, vrem să scriem o funcție pentru a schimba două variabile. Dacă folosim mecanismul apel prin valoare pentru a schimba două variabile, variabilele reale nu sunt schimbate în funcția apelantului. Metoda apelului prin adresă poate fi utilizată într-un astfel de scenariu. În acest exemplu, transmitem adresa atât var_1 (& var_1), cât și var_2 (& var_2) funcției mySwap (). În interiorul funcției mySwap (), schimbăm valorile acestor două variabile cu ajutorul indicatorilor. După cum puteți vedea în rezultatul de mai jos, valoarea reală a acestor variabile este schimbată în funcția main () după executarea funcției mySwap ().

#include
folosind spațiu de numeore;

nulmySwap(int *vptr_1,int *vptr_2)
{
inttemp_var;
temp_var= *vptr_1;
*vptr_1= *vptr_2;
*vptr_2=temp_var;
}

intprincipal()
{
intvar_1= 100;
intvar_2= 300;

cost << 'Înainte de a apela funcția mySwap (), valoarea lui var_1:' <<var_1<<endl;
cost << 'Înainte de a apela funcția mySwap (), valoarea var_2:' <<var_2<<endl<<endl;

cost << „Apelarea funcției mySwap () - Apelați după adresă.” <<endl<<endl;
mySwap(&var_1,&var_2);

cost << „După apelarea funcției mySwap (), valoarea var_1:” <<var_1<<endl;
cost << 'După ce ați apelat funcția mySwap (), valoarea lui var_2:' <<var_2<<endl;

întoarcere 0;
}

Exemplu-3 - Apel prin referință (1)

În acest exemplu, vom demonstra cum funcționează apelul prin referință în C ++. În definiția funcției hello (), valoarea este primită ca o variabilă de referință (& p). Cu ajutorul variabilei de referință (adică, p), putem schimba valoarea parametrului real (var) din funcția main ().

#include
folosind spațiu de numeore;

nulBuna ziua(int &p)
{
cost <<endl<< Funcția Inside hello (): <<endl;
cost << „Valoarea p =” <<p<<endl;
p= 200;
cost << „Valoarea p =” <<p<<endl;
cost << „Ieșirea din funcția hello ().” <<endl;
}

intprincipal()
{
intUnde= 100;
cost << „Valoarea var în funcția main () =” <<Unde<<endl;

Buna ziua(Unde);

cost <<endl<< „Valoarea var în funcția main () =” <<Unde<<endl;

întoarcere 0;
}

Exemplu-4 - Apel prin referință (2)

Acesta este un alt exemplu de apel prin referință. În acest exemplu, vom demonstra cum funcționează apelul prin referință în C ++ cu ajutorul unui exemplu din lumea reală. Funcția mySwap () este apelată de la funcția main () cu următorii parametri - var_1 și var_2. În interiorul funcției mySwap (), primim parametrii ca variabile de referință.

#include
folosind spațiu de numeore;

nulmySwap(int &vref_1,int &vref_2)
{
inttemp_var;
temp_var=vref_1;
vref_1=vref_2;
vref_2=temp_var;
}

intprincipal()
{
intvar_1= 100;
intvar_2= 300;

cost << 'Înainte de a apela funcția mySwap (), valoarea lui var_1:' <<var_1<<endl;
cost << 'Înainte de a apela funcția mySwap (), valoarea var_2:' <<var_2<<endl<<endl;

cost << „Apelarea funcției mySwap () - Apelați prin referință.” <<endl<<endl;
mySwap(var_1, var_2);

cost << „După apelarea funcției mySwap (), valoarea var_1:” <<var_1<<endl;
cost << 'După ce ați apelat funcția mySwap (), valoarea lui var_2:' <<var_2<<endl;

întoarcere 0;
}

Concluzie

Înțelegerea metodelor de trecere a parametrilor în C ++ este foarte crucial. Limbajul de programare C acceptă Apel după valoare și Apel numai după adresă. Dar, C ++ acceptă apelul prin referință împreună cu cele două mecanisme anterioare. În acest articol, am văzut câteva exemple de lucru pentru a înțelege conceptul de apel prin adresă și apel prin referință. Apelul după adresă este o metodă foarte puternică și populară în aplicațiile de domenii încorporate.