Pasar puntero por referencia en C++

Jinku Hu 12 octubre 2023
  1. Utilice la notación &var para pasar un objeto por referencia
  2. Utilice la notación *&var para pasar un puntero a un objeto por referencia
Pasar puntero por referencia en C++

Este artículo mostrará varios métodos sobre cómo pasar un puntero por referencia en C++.

Utilice la notación &var para pasar un objeto por referencia

Generalmente, una referencia define un alias para el objeto en C++ y debe inicializarse durante la declaración. La referencia inicializada permanece vinculada al objeto dado y no se puede volver a vincular a otro objeto. Las operaciones en las referencias modifican los propios objetos enlazados. Por lo tanto, son una forma común de pasar parámetros a funciones. Las referencias son el método preferido ya que su uso evita la copia implícita de los objetos en el ámbito de la función del destinatario. El siguiente ejemplo demuestra el paso de un objeto std::vector por referencia const a la función que busca a través de los elementos el valor dado.

#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::string;
using std::vector;

void findInteger(const vector<int> &arr, int k) {
  for (auto &i : arr) {
    if (i == k) {
      cout << "found - " << k << " in the array" << endl;
      return;
    }
  }
  cout << "couldn't find - " << k << " in the array" << endl;
}

int main() {
  vector<int> vec = {11, 21, 121, 314, 422, 4, 242};

  findInteger(vec, rand() % 100);

  return EXIT_SUCCESS;
}

Producción :

couldn t find - 83 in the array

Utilice la notación *&var para pasar un puntero a un objeto por referencia

Por otro lado, podemos usar la notación *&var para pasar un puntero por referencia a la función. Un puntero es un objeto en sí mismo. Puede asignarse o copiarse para pasar una referencia a un puntero como parámetro de función. En este caso, el símbolo & es una notación de referencia y no el operador de dirección de utilizado para recuperar el puntero a la ubicación del objeto en la memoria. Observe que se debe acceder al valor del objeto pasado con el operador estándar de desreferencia del puntero - *. El siguiente código de muestra imprime los valores ASCII del objeto de cadena dado en la secuencia cout.

#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::string;
using std::vector;

void printASCII(string *&str) {
  for (auto &i : *str) {
    cout << (int)i << ", ";
  }
  cout << endl;
}

int main() {
  auto str = new string("Arbitrary string");

  printASCII(str);

  return EXIT_SUCCESS;
}

Producción :

65, 114, 98, 105, 116, 114, 97, 114, 121, 32, 115, 116, 114, 105, 110, 103,
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artículo relacionado - C++ Pointer