Trucada C ++ per adreça i trucada per referència

C Call Address



C ++ és un llenguatge de programació d’ús general flexible. Va ser creat originalment per Bjarne Stroustrup, un informàtic danès, el 1985. C ++ admet mètodes de pas de tres paràmetres, és a dir, trucades per valor, trucades per adreces i trucades per referència. En aquest article, analitzarem la trucada per adreça i la trucada per mecanisme de referència.

Què és una funció?

Abans d’entrar en el tema real, hem d’entendre quina és la funció de C ++. És possible que molts de vosaltres ja conegueu les funcions.







Una funció és bàsicament un tros de codi que es pot utilitzar per realitzar una determinada tasca. Una funció s'utilitza principalment per reduir el codi repetitiu en un programa C ++. Pren l'entrada com a paràmetres i retorna la sortida com a valor de retorn. Si definim la funció una vegada, la podem trucar / utilitzar diverses vegades a la part posterior del nostre programa. D’aquesta manera, estalviem molts codis repetitius al programa.



Tots els programes C ++ tenen la funció main (). La funció main () és el punt d’entrada d’un programa C ++. A part de la funció main (), el programador pot definir tantes funcions com vulgui.



Aquí teniu la sintaxi de definir una funció:





Return_type Function_Name(Llista de paràmetres d'entrada)

La funció en C ++ pot acceptar 0 o més paràmetres d’entrada, mentre que només pot retornar un valor de retorn.

Què és l'adreça?

Hi ha dos tipus de variables en C ++ (similars al llenguatge C): variable de dades i variable d’adreça. La variable d’adreça s’utilitza per emmagatzemar l’adreça d’una altra variable de dades. Per exemple, considerem el fragment de codi següent:



intjo= 100;
int *ptr= &jo;

Aquí, la primera sentència ens indica que la variable i és una variable de dades i que emmagatzema el valor 100. A la segona sentència declarem una variable punter, és a dir, ptr, i la inicialitzem amb l’adreça de la variable i.

Què és Reference?

La referència és una altra característica poderosa del llenguatge C ++. Considerem el fragment de codi següent:

inta= 200;
int &r=a;

En aquest exemple, hem declarat un enter, és a dir, a i, a continuació, hem declarat una variable de referència r, que s’inicialitza amb el valor de a. Per tant, la variable de referència no és res més que un àlies d’una altra variable.

Mètodes de pas de paràmetres:

Hi ha tres tipus de mètodes de transferència de paràmetres en llenguatge C ++:

  1. Truca per valor / Passa per valor
  2. Truca per adreça / Passa per adreça
  3. Truca per referència / Passa per referència

En aquest article, estem discutint sobre - Truca per adreça i Truca per referència.

Què és trucar per adreça / passar per adreça?

En el cas del mètode Truca per adreça / Passa per adreça, els arguments de la funció es passen com a adreça. La funció de trucada passa l'adreça dels paràmetres. Les variables de punter s’utilitzen a la definició de la funció. Amb l'ajut del mètode Truca per adreça, la funció pot accedir als paràmetres reals i modificar-los. Més endavant veurem un exemple del mètode de trucada per adreça d’aquest article.

Què és trucar per referència / passar per referència?

Al mètode Truca per referència / Passa per referència, els paràmetres de la funció es passen com a referència. Dins de la definició de la funció, s’accedeix als paràmetres reals mitjançant la variable de referència.

Exemples:

Ara, ja que entenem el concepte de mètodes de pas de paràmetres, veurem diversos programes d’exemple per entendre el mecanisme de pas de paràmetres a C ++:

  1. Exemple-1: trucada per adreça (1)
  2. Exemple-2: trucada per adreça (2)
  3. Exemple 3: trucada per referència (1)
  4. Exemple-4: trucada per referència (2)

Els dos primers exemples es donen per explicar com funciona el mètode Truca per adreça en C ++. Els dos últims exemples són per explicar la convocatòria per concepte de referència.

Exemple-1: trucada per adreça (1)

En aquest exemple, demostrarem la trucada per mecanisme d'adreça. Des de la funció main (), estem trucant a la funció hello () i passant l'adreça de var. A la definició de la funció, rebem l'adreça de var en una variable de punter, és a dir, p. Dins de la funció hola, el valor de var s'està canviant a 200 amb l'ajut del punter. Per tant, el valor de var canvia a 200 dins de la funció main () després de la trucada a la funció hello ().

#incloure
utilitzant espai de nomshores;

buitHola(int *pàg)
{
cost <<endl<< 'Funció Inside hello ():' <<endl;
cost << 'Valor de * p =' << *pàg<<endl;
*pàg= 200;
cost << 'Valor de * p =' << *pàg<<endl;
cost << 'S'està sortint de la funció hello ().' <<endl;
}

intprincipal()
{
inton= 100;
cost << 'Valor de var dins de la funció main () =' <<on<<endl;

Hola(&on);

cost <<endl<< 'Valor de var dins de la funció main () =' <<on<<endl;

tornar 0;
}

Exemple-2: trucada per adreça (2)

Aquest és un altre exemple del mètode de trucada per adreça. En aquest exemple, explicarem com es pot utilitzar el mètode de trucada per adreça per resoldre un problema de la vida real. Per exemple, volem escriure una funció per canviar dues variables. Si fem servir el mecanisme de trucada per valor per intercanviar dues variables, les variables reals no s’intercanvien a la funció de la persona que truca. El mètode de trucada per adreça es pot utilitzar en aquest escenari. En aquest exemple, passem l'adreça de var_1 (& var_1) i var_2 (& var_2) a la funció mySwap (). Dins de la funció mySwap (), estem canviant els valors d’aquestes dues variables amb l’ajut dels indicadors. Com podeu veure a la sortida següent, el valor real d’aquestes variables s’intercanvia a la funció main () després d’executar la funció mySwap ().

#incloure
utilitzant espai de nomshores;

buitmySwap(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 << 'Abans de trucar a la funció mySwap (), valor de var_1:' <<var_1<<endl;
cost << 'Abans de trucar a la funció mySwap (), valor de var_2:' <<var_2<<endl<<endl;

cost << 'Funció de trucada a mySwap (): trucada per adreça.' <<endl<<endl;
mySwap(&var_1,&var_2);

cost << 'Després de trucar a la funció mySwap (), valor de var_1:' <<var_1<<endl;
cost << 'Després de trucar a la funció mySwap (), valor de var_2:' <<var_2<<endl;

tornar 0;
}

Exemple 3: trucada per referència (1)

En aquest exemple, demostrarem com funciona la trucada per referència en C ++. A la definició de la funció hello (), el valor s'està rebent com a variable de referència (& p). Amb l’ajut de la variable de referència (és a dir, p), podem canviar el valor del paràmetre real (var) dins de la funció main ().

#incloure
utilitzant espai de nomshores;

buitHola(int &pàg)
{
cost <<endl<< 'Funció Inside hello ():' <<endl;
cost << 'Valor de p =' <<pàg<<endl;
pàg= 200;
cost << 'Valor de p =' <<pàg<<endl;
cost << 'S'està sortint de la funció hello ().' <<endl;
}

intprincipal()
{
inton= 100;
cost << 'Valor de var dins de la funció main () =' <<on<<endl;

Hola(on);

cost <<endl<< 'Valor de var dins de la funció main () =' <<on<<endl;

tornar 0;
}

Exemple-4: trucada per referència (2)

Aquest és un altre exemple de trucada per referència. En aquest exemple, demostrarem com funciona la trucada per referència en C ++ amb l'ajut d'un exemple del món real. La funció mySwap () es crida des de la funció main () amb els paràmetres següents: var_1 i var_2. Dins de la funció mySwap (), estem rebent els paràmetres com a variables de referència.

#incloure
utilitzant espai de nomshores;

buitmySwap(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 << 'Abans de trucar a la funció mySwap (), valor de var_1:' <<var_1<<endl;
cost << 'Abans de trucar a la funció mySwap (), valor de var_2:' <<var_2<<endl<<endl;

cost << 'Cridant la funció mySwap (): truqueu per referència.' <<endl<<endl;
mySwap(var_1, var_2);

cost << 'Després de trucar a la funció mySwap (), valor de var_1:' <<var_1<<endl;
cost << 'Després de trucar a la funció mySwap (), valor de var_2:' <<var_2<<endl;

tornar 0;
}

Conclusió

Comprensió dels mètodes de transferència de paràmetres a C ++ és molt crucial. El llenguatge de programació C admet només les trucades per valor i les trucades per adreça. Però, C ++ admet la trucada per referència juntament amb els dos mecanismes anteriors. En aquest article, hem vist diversos exemples de treball per entendre el concepte de trucada per adreça i trucada per referència. La trucada per adreça és un mètode molt potent i popular en aplicacions de domini incrustat.