Esercizi di Lettura Codice - Puntatori in C++
Esercizio di comprensione
Inserire all’interno delle stringhe di stampa ciò che stampa effettivamente il cout. Abbozzarlo prima di eseguire il codice
#include <iostream>
using namespace std;
int main() {
int a = 7;
int* p = &a;
cout << " Valore della variabile a: " << a << endl;
cout << " Valore puntato da p: " << *p << endl;
cout << " ... " << &a << endl;
cout << " ... " << p << endl;
cout << " ... " << &p << endl;
int arr[] = {1, 34, 2, 29};
int* parr = arr;
cout << " ... " << *parr << endl;
cout << " ... " << parr << endl;
cout << " ... " << &arr[0] << endl;
cout << " ... " << &arr << endl;
cout << " ... " << *(parr + 1) << endl;
return 0;
}
Esercizi di scrittura e applicazione con i puntatori
Esercizio 2 – Somma degli elementi di un array
Scrivere una funzione che calcoli la somma di tutti gli elementi di un array l’aritmetica dei puntatori (*p, p++, ecc.).
int sommaArray(int* arr, int dim);
Esercizio 3 - Struct e puntatori
Il seguente codice definisce una struttura ContoBancario che rappresenta un conto corrente. Nel main() viene istanziato un conto specifico e creato un puntatore a esso.
Si vuole scrivere una funzione preleva() esterna al main, che riceva come parametro un puntatore a ContoBancario e un importo da prelevare, e modifichi il saldo del conto decrementandolo solo se il saldo è sufficiente.
Se l’importo da prelevare è maggiore del saldo disponibile, la funzione deve:
- stampare un messaggio di errore: “Saldo insufficiente”
- non modificare il saldo
Completare il codice inserendo l’implementazione della funzione preleva() e la relativa chiamata nel main().
#include <iostream>
using namespace std;
struct ContoBancario {
int numeroConto;
string intestatario;
float saldo;
};
// Implementare funziona
void preleva(ContoBancario* conto, float importo);
int main() {
ContoBancario c1 = {12345, "Mario Rossi", 250.50};
ContoBancario* pc = &c1;
cout << "Saldo iniziale di " << pc->intestatario << ": " << pc->saldo << " €" << endl;
// TODO: chiama la funzione per prelevare una certa somma
// preleva(...);
cout << "Saldo dopo il prelievo: " << pc->saldo << " €" << endl;
return 0;
}
Esercizio 4 – Scambio di due variabili
Scrivere una funzione che scambi due variabili usando solo puntatori.
void scambia(int* a, int* b);
Esercizio 5 – Allocazione dinamica con new
Scrivere un programma che:
- Chieda all’utente di inserire la dimensione di un array di interi.
- Allochi dinamicamente un puntatore ad array.
- Permetta all’utente di inserire i valori dell’array.
#include <iostream>
using namespace std;
int main() {
int n;
cout << "Quanti numeri vuoi inserire? ";
cin >> n;
// TODO: Creare un puntatore a un array di interi -> necessario capire come fare (guardare sezione Stack e Heap)
cout << "Inserisci " << n << " numeri:" << endl;
for (int i = 0; i < n; i++) {
// TODO: leggi un numero da tastiera e salvalo nell’array
}
// TODO: liberare la memoria...
return 0;
}