English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Puntatore e funzione C++

In questo articolo, imparerai a passare puntatori come parametri a una funzione e a utilizzarli efficacemente nel programma.

InFunzione C++Nell'articolo, hai imparato qualcosa su come passare parametri a una funzione. Poiché si passano valori effettivi, questo metodo viene chiamato passaggio per valore.

Ma c'è un altro modo per passare parametri a una funzione, in cui non si passano i valori effettivi dei parametri. Invece, si passa solo la riferimento a quei valori.

Esempio 1: Passaggio di riferimento senza puntatori

#include <iostream>
using namespace std;
// Prototipo della funzione
void swap(int&, int&);
int main()
{
    int a = 11, b = 22;
    cout << "Prima dello scambio" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    swap(a, b);
    cout << "\nDopo lo scambio" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    return 0;
}
void swap(int& n1, int& n2) {
    int temp;
    temp = n1;
    n1 = n2;
    n2 = temp;
}

Risultato dell'output

Prima dello scambio
a = 11
b = 22
Dopo lo scambio
a = 22
b = 11

Nel main() sono definite due variabili intere a e b. Queste intere vengono passate alla funzione swap() tramite riferimento.

Il compilatore può riconoscere che è stato passato tramite riferimento perché la definizione della funzione è void swap(int& n1, int& n2) (si prega di notare il tipo di dati dopo il &)Simbolo).

In funzione swap() si ricevono solo le referenze (indirizzi) delle variabili a e b e lo scambio avviene all'indirizzo originale delle variabili.

In funzione swap(), n1 e n2 sono parametri formali e, in effetti, corrispondono alle variabili a e b rispettivamente.

C'è un altro modo di usarliPuntatoriUn altro metodo per completare la stessa attività.

Esempio 2: Utilizzo di passaggio di riferimento con puntatori

#include <iostream>
using namespace std;
// Prototipo della funzione
void swap(int*, int*);
int main()
{
    int a = 1, b = 2;
    cout << "Prima dello scambio" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    swap(&a, &b);
    cout << "\nDopo lo scambio" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    return 0;
}
void swap(int* n1, int* n2) {
    int temp;
    temp = *n1;
    *n1 = *n2;
    *n2 = temp;
}

L'output di questo esempio è lo stesso dell'output precedente.

In questo caso, l'indirizzo della variabile viene passato durante la chiamata di funzione, non il variabile stessa.

swap(&a, &b); // &a è l'indirizzo di a, &b è l'indirizzo di b

Poiché vengono passati indirizzi invece di valori, è necessario utilizzare l'operatore di de-referenziazione per accedere ai valori memorizzati negli indirizzi.

void swap(int* n1, int* n2) { 
 ... .. ...
}

* n1 e * n2 forniscono rispettivamente i valori memorizzati agli indirizzi n1 e n2.

Poiché n1 contiene l'indirizzo di a, qualsiasi cosa venga fatto a * n1 altererà anche il valore di a nella funzione main(). Allo stesso modo, b avrà lo stesso valore di * n2.