Puntatori come parametri
Lezione 7 di 14 del corso Puntatori in C++ di Coddy.
L'uso delle funzioni nella programmazione è molto diffuso. Le usiamo come strumento per completare un'attività più volte o, quantomeno, per organizzare il nostro codice e mantenerlo separato.
Quando passiamo valori a una funzione, i valori su cui operiamo all'interno della funzione sono copie dei valori originali. È qui che è utile passare valori a una funzione come puntatori.
void swap(int x, int y) {
int temp = x;
x = y;
y = temp;
cout << x << " " << y << endl;
}
int main() {
int a = 10, b = 20;
cout << a << " " << b << endl;
swap(a, b);
cout << a << " " << b;
}Output:
10 20
20 10
10 20Come puoi vedere, inizialmente i valori sono normali; quando li passiamo alle funzioni, vengono create copie dei valori originali, le copie vengono scambiate, stampiamo i valori scambiati e infine possiamo vedere che, dopo la chiamata alla funzione nella funzione main, non otteniamo risultati permanenti e i valori sono normali. Questo si può risolvere usando i puntatori.
void swap(int *x, int *y) {
int temp = *x;
*x = *y;
*y = temp;
cout << *x << " " << *y << endl;
}
int main() {
int a = 10, b = 20;
cout << a << " " << b << endl;
swap(&a, &b);
cout << a << " " << b;
}Output:
10 20
20 10
20 10Abbiamo risolto il problema. Ora, invece di passare i valori, passiamo gli indirizzi in cui si trovano i valori; come argomenti, nella funzione riceviamo puntatori che contengono quegli indirizzi. Creiamo un intero temp, che riceve il valore dereferenziato da x; il valore all'indirizzo di x (che è lo stesso indirizzo di a nella funzione main()) viene modificato nel valore di y (il valore iniziale all'indirizzo di b) e infine y dereferenziato riceve il valore di temp. Poiché abbiamo modificato i valori agli indirizzi indicati, e non i valori indicati, la modifica è permanente.
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Sfida
FacileCompleta la funzione Calculator che modifica in modo permanente i valori delle variabili large e small: sottrai a large la differenza tra large e small, mentre small deve essere moltiplicata per se stessa.
Input
5 3
Output
5 3
3 9
Spiegazione
Sottraendo a 5 la differenza tra 5 e 3, che è 2, si ottiene 5 - 2 = 3, mentre moltiplicando 3 per se stesso si ottiene 9
Nota: NON scrivere la funzione main()
Provalo tu
#include <iostream>
using namespace std;
void Calculator(// Accetta gli argomenti: large & small) {
// Inserisci il codice per i calcoli
}
// NON scrivere la funzione main()Tutte le lezioni di Puntatori in C++
2Puntatori e riferimenti
Puntatori come parametriRiferimenti - &Riferimenti come parametriPuntatori vs riferimenti3Allocazione dinamica della memoria
Operatori new e deleteMemory leakArray dinamicoArray dinamico - inserimentoEsercitati da solo: Compilatore C++ online