Menu
Coddy logo textTech

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 20

Come 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 10

Abbiamo 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.

quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

challenge icon

Sfida

Facile

Completa 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++

Esercitati da solo: Compilatore C++ online