Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Lenguaje C

Llamada de C++ por referencia:uso de punteros [con ejemplos]

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 argumento a la función con la ayuda de ejemplos.

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

Sin embargo, existe otra forma de pasar argumentos a una función en la que no se pasan los valores reales de los argumentos. En su lugar, 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 & en void func2(int &numRef) . Esto denota que estamos usando la dirección de la variable como nuestro parámetro.

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


Ejemplo 1:Pasar por referencia sin punteros

#include <iostream>
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 << "\nAfter swapping" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;

    return 0;
}

Salida

Before swapping
a = 1
b = 2

After swapping
a = 2
b = 1

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

void swap(int &n1, int &n2)

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

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

En el swap() función, los parámetros de función n1 y n2 apuntan al mismo valor que las variables a y b respectivamente. Por lo tanto, el intercambio tiene lugar en el valor real.

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


Ejemplo 2:Pasar por referencia usando punteros

#include <iostream>
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 << "\nAfter 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

Before swapping
a = 1
b = 2

After swapping
a = 2
b = 1

Aquí, podemos ver que la salida es la misma que en el ejemplo anterior. Fíjate en 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, un operador de desreferencia * debe usarse para acceder al valor almacenado en esa dirección.

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

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

Desde n1 y n2 contienen las direcciones de a y b , cualquier cosa se hace a *n1 y *n2 cambiará los valores reales de a y b .

Por lo tanto, cuando imprimimos los valores de a y b en el main() función, los valores se modifican.


Lenguaje C

  1. C # usando
  2. Operadores de C++
  3. Comentarios de C++
  4. Plantillas de clase de C++
  5. Punteros C
  6. Punteros de C++ con ejemplos
  7. 13 tipos diferentes de malware en 2021 [con ejemplos]
  8. 5 tipos diferentes de centros de datos [con ejemplos]
  9. 8 tipos diferentes de tecnología en 2021 [con ejemplos]
  10. C - Punteros
  11. Descripción general de C++