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