Funzioni e passaggio dei parametri in C e C++
In questa lezione confronterai tre modi di passare i parametri a una funzione: per valore, per puntatore e per riferimento.
Introduzione
Per impostazione predefinita, quando passi una variabile a una funzione, C e C++ ne creano una copia, quindi le modifiche dentro la funzione non toccano la variabile originale. Se la funzione deve modificare l'originale, chi la chiama deve permetterlo esplicitamente, con un puntatore in C o un riferimento in C++.
Punti importanti
- Attiva gli avvisi del compilatore (compiler warning) e correggili tutti.
- Comprendi bene il tipo di dato e la durata (lifetime) di ogni valore.
- Controlla sempre i dati in ingresso e i limiti degli indici degli array.
Esempi di codice C e C++
#include <stdio.h>
void swap_ints(int *left, int *right) {
int temporary = *left;
*left = *right;
*right = temporary;
}
int main(void) {
int a = 4, b = 9;
swap_ints(&a, &b);
printf("%d %d\n", a, b);
return 0;
}
9 4
#include <iostream>
void swap_ints(int& left, int& right) {
int temporary = left;
left = right;
right = temporary;
}
int main() {
int a = 4, b = 9;
swap_ints(a, b);
std::cout << a << ' ' << b << '\n';
}
9 4
Confronto tra C e C++
In C, la funzione swap_ints riceve l'indirizzo delle due variabili e usa l'operatore * per accedervi e scambiarne i valori. In C++, il riferimento (reference) funziona come un altro nome per la variabile originale, quindi la sintassi è più breve e modifica comunque il valore. La parola chiave const su un parametro indica che la funzione legge i dati senza modificarli.
C usa piccole funzioni procedurali e mostra apertamente come i dati sono rappresentati in memoria.
C++ continua a permettere il lavoro a basso livello, ma aggiunge tipi di libreria e astrazioni più sicure.
Esercizi di approfondimento
Esegui entrambe le versioni e poi modifica il codice per osservare la differenza di sicurezza che offre ciascun linguaggio.
- Prova input non validi e valori ai limiti.
- Compila con i flag -Wall -Wextra -Wpedantic per attivare più avvisi.
- Sposta le dichiarazioni condivise in un file header e l'implementazione in un altro file.
Esercitati con una sfida
Usa ciò che questa lezione spiega per risolvere un problema reale. Ogni sfida gira nel browser, con test immediati e una revisione dell'IA.
- Distance Between Points Compute the straight-line distance between two points. Facile
- Days in a Month Return how many days a month has, including leap years. Facile