Llamada de C ++ por referencia: uso de punteros (con ejemplos)

En este tutorial, aprenderemos sobre la llamada de C ++ por referencia para pasar punteros como un argumento a la función con la ayuda de ejemplos.

En el tutorial de Funciones de C ++, aprendimos cómo pasar argumentos a una función. Este método utilizado se llama pasar por valor porque se pasa el valor real.

Sin embargo, hay otra forma de pasar argumentos a una función donde no se pasan los valores reales de los argumentos. En cambio, se pasa la referencia a los valores.

Por ejemplo,

 // function that takes value as parameter void func1(int numVal) ( // code ) // function that takes reference as parameter // notice the & before the parameter void func2(int &numRef) ( // code ) int main() ( int num = 5; // pass by value func1(num); // pass by reference func2(num); return 0; )

Observe el &in void func2(int &numRef). Esto denota que estamos usando la dirección de la variable como nuestro parámetro.

Entonces, cuando llamamos a la func2()función main()pasando la variable num como argumento, en realidad estamos pasando la dirección de la variable num en lugar del valor 5 .

C ++ pasar por valor frente a pasar por referencia

Ejemplo 1: pasar por referencia sin punteros

 #include using namespace std; // function definition to swap values void swap(int &n1, int &n2) ( int temp; temp = n1; n1 = n2; n2 = temp; ) int main() ( // initialize variables int a = 1, b = 2; cout << "Before swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; // call function to swap numbers swap(a, b); cout << "After swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0; )

Salida

 Antes de cambiar a = 1 b = 2 Después de cambiar a = 2 b = 1

En este programa, pasamos las variables ayb a la swap()función. Observe la definición de la función,

 void swap(int &n1, int &n2)

Aquí, estamos usando &para denotar que la función aceptará direcciones como sus parámetros.

Por tanto, el compilador puede identificar que en lugar de valores reales, la referencia de las variables se pasa a los parámetros de la función.

En la swap()función, los parámetros de la función n1 y n2 apuntan al mismo valor que las variables ayb respectivamente. Por lo tanto, el intercambio se realiza sobre el valor real.

La misma tarea se puede realizar utilizando los punteros. Para obtener más información sobre los punteros, visite Punteros de C ++.

Ejemplo 2: pasar por referencia usando punteros

 #include using namespace std; // function prototype with pointer as parameters void swap(int*, int*); int main() ( // initialize variables int a = 1, b = 2; cout << "Before swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; // call function by passing variable addresses swap(&a, &b); cout << "After swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0; ) // function definition to swap numbers void swap(int* n1, int* n2) ( int temp; temp = *n1; *n1 = *n2; *n2 = temp; )

Salida

 Antes de cambiar a = 1 b = 2 Después de cambiar a = 2 b = 1

Aquí, podemos ver que la salida es la misma que en el ejemplo anterior. Note la línea,

 // &a is address of a // &b is address of b swap(&a, &b);

Aquí, la dirección de la variable se pasa durante la llamada a la función en lugar de la variable.

Dado que se pasa la dirección en lugar del valor, se *debe utilizar un operador de desreferencia para acceder al valor almacenado en esa dirección.

 temp = *n1; *n1 = *n2; *n2 = temp; 

*n1y *n2da el valor almacenado en la dirección n1 y n2 respectivamente.

Dado que n1 y n2 contienen las direcciones de ayb, cualquier cosa se hace en *n1y * n2 cambiará los valores reales de ay b.

Por lo tanto, cuando imprimimos los valores de ayb en la main()función, los valores cambian.

Articulos interesantes...