Passa il puntatore per riferimento in C++

Jinku Hu 12 ottobre 2023
  1. Usa la notazione &var per passare l’oggetto per riferimento
  2. Usa la notazione *&var per passare un puntatore a un oggetto per riferimento
Passa 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,
Autore: 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

Articolo correlato - C++ Pointer