Existeixen diverses maneres d'enviar dades (o variables) com a argument a una funció. Dos dels comuns són Passing by Value i Passing by Reference. Passar per referència permet que una funció modifiqui una variable sense crear-ne una còpia. Hem de declarar variables de referència. La ubicació de memòria de la variable i el paràmetre passat és la mateixa. Per tant, qualsevol canvi al paràmetre també es reflecteix en la variable dins de la seva funció principal. Aquest article se centra a discutir com passar variables per referència en C++.
Què és una passada per referència?
Quan una variable es passa com a referència a una funció, l'adreça de la variable s'emmagatzema en una variable punter dins de la funció. Per tant, la variable dins de la funció és un àlies per a la variable passada. Per tant, qualsevol operació realitzada sobre la variable dins de la funció també es reflectirà a la funció de crida.
- Aquesta capacitat de reflectir els canvis podria retornar més d'un valor per una funció.
- A més, una funció void podria tornar tècnicament valor/s mitjançant aquest mètode.
El & L'operador (adreça de) denota valors passats per referència en una funció. A continuació es mostra el programa C++ per implementar la referència de pas per referència:
C++
java integer
// C++ program to implement> // pass-by-reference> #include> using> namespace> std;> > void> f(>int> & x)> {> >x--;> }> > // Driver code> int> main()> {> >int> a = 5;> >cout << a << endl;> >f(a);> >cout << a << endl;> }> |
>
>Sortida
ciutats a Austràlia
5 4>
Explicació:
- En primer lloc, es defineix una funció amb el tipus de dades de retorn void i pren valor per referència (tal com indica el & signe d'adreça en els paràmetres formals).
- La funció disminueix el valor del seu paràmetre formal en 1.
- Després, dins de la funció principal, s'anomena una variable entera a s'inicialitza amb el valor 5.
- El valor de 'a' està imprès a la consola. Es crida la funció f() i la variable es passa com a argument.
- Dins de la funció, el valor de la variable es disminueix en 1.
- En tornar de la funció, es torna a mostrar el valor de la variable, que va resultar ser 1 menys que el valor original.
Per tant, els canvis a una variable passats per referència a una funció es reflecteixen a la funció de crida.
Funció d'intercanvi mitjançant Pass-By-Reference
La funció d'intercanvi intercanvia els valors de les dues variables que rep com a arguments. A continuació es mostra el programa C++ per intercanviar els valors de dues variables mitjançant la referència.
C++
// C++ program to swap the values> // of two variables using> // pass-by-reference> #include> > // Prototype of the function> void> swap(>int> &,>int> &);> > // Driver code> int> main()> {> >int> x, y;> > >// Inputting two variables> >printf>(>'Enter the value of x and y
'>);> >scanf>(>'%d%d'>, &x, &y);> > >// Displaying their values before swapping> >printf>(>'Before Swapping
x = %d
y = %d
'>,> >x, y);> > >// Calling the function & sending variable> >// values as argument> >swap(x, y);> > >// Displaying their values after swapping> >printf>(>'After Swapping
x = %d
y = %d
'>,> >x, y);> >return> 0;> }> > // Function uses pass by reference method> // to swap passed variable values> void> swap(>int> &a,>int> &b)> {> >int> temp;> > >temp = b;> >b = a;> >a = temp;> }> |
codis d'error de Linux
>
>
Sortida:
Explicació:
- En primer lloc, es defineix el prototip de funció (opcional si la funció es defineix abans de la funció principal).
- Dins de la funció principal, els valors de les dues variables es prenen com a entrada de l'usuari.
- Els valors abans de cridar la funció d'intercanvi s'imprimeixen a la consola.
- Després d'això, els valors es passen com a argument a la funció d'intercanvi.
- La funció d'intercanvi utilitza trucada per referència i conté el codi per intercanviar les dues variables.
- Un cop finalitzada la funció, el valor de les dues variables es mostra a la funció principal (després de la crida a l'intercanvi).
- Els valors intercanviats es mostren a la pantalla.
Passeu per referència amb punters
També és possible passar l'adreça variable de la funció trucada i utilitzar-la com a punter dins de la funció cridada. Això permet una mica més explícitament en el canvi de valors variables a la funció.
A continuació es mostra el programa C++ per implementar la referència de pas per referència amb punters:
js cadena multilínia
C++
// C++ program to implement> // pass-by-reference with> // pointers> #include> using> namespace> std;> > void> f(>int> *x)> {> >*x = *x - 1;> }> > // Driver code> int> main()> {> >int> a = 5;> >cout << a << endl;> >f(&a);> >cout << a << endl;> }> |
>
>Sortida
5 4>
Explicació:
- En primer lloc, es defineix una funció amb el tipus de dades de retorn void i pren valor com a punters (tal com s'indica amb * asterisc signar els paràmetres formals).
- La funció disminueix el valor del seu paràmetre formal en 1.
- Després d'això, dins de la funció principal, s'inicialitza una variable entera anomenada 'a' amb el valor 5.
- Aleshores es mostra aquest valor. Es crida a la funció i es passa l'adreça de la variable com a argument.
- Dins de la funció, el valor de la variable punter es disminueix en 1.
- En tornar de la funció, es torna a mostrar el valor de la variable, que va resultar ser 1 menys que el valor original.