HOWTO · C++

Passa il puntatore per riferimento in C++

Questo articolo introduce come passare il puntatore per riferimento in C++

Questo articolo illustrerà più metodi su come passare un puntatore per riferimento in C++.

Usa la notazione &var per passare l’oggetto per riferimento

In genere, un riferimento definisce un alias per l’oggetto in C++ e deve essere inizializzato durante la dichiarazione. Il riferimento inizializzato rimane vincolato all’oggetto dato e non può essere ricollegato a un altro oggetto. Le operazioni sui riferimenti modificano gli oggetti associati stessi. Pertanto, sono un modo comune per passare i parametri alle funzioni. I riferimenti sono il metodo preferito in quanto il loro utilizzo evita la copia implicita degli oggetti nell’ambito della funzione chiamato. Il prossimo esempio mostra il passaggio di un oggetto std::vector per riferimento const alla funzione che cerca tra gli elementi il ​​valore dato.

#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;
}

Produzione:

couldn t find - 83 in the array

Usa la notazione *&var per passare un puntatore a un oggetto per riferimento

D’altra parte, possiamo usare la notazione *&var per passare un puntatore facendo riferimento alla funzione. Un puntatore è un oggetto stesso. Può essere assegnato o copiato per passare un riferimento a un puntatore come parametro di funzione. In questo caso, il simbolo & è una notazione di riferimento e non l’operatore di indirizzo utilizzato per recuperare il puntatore alla posizione dell’oggetto in memoria. Si noti che il valore dell’oggetto passato dovrebbe essere accessibile con l’operatore standard di dereferenziazione del puntatore - *. Il codice di esempio seguente stampa i valori ASCII dell’oggetto stringa specificato nel flusso 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;
}

Produzione:

65, 114, 98, 105, 116, 114, 97, 114, 121, 32, 115, 116, 114, 105, 110, 103,