Le funzioni in C, e in generale in tutti i linguaggi di programmazione, sono sostanzialmente dei blocchi di codice riutilizzabili; possono essere pensate come dei “sottoprogrammi” richiamabili da altri programmi.
Lo scopo principale dell’uso delle funzioni è quello di poter riutilizzare il codice che si scrive (senza doverlo quindi riscrivere più volte!), inoltre l’utilizzo delle funzioni aumenta la leggibilità dei programmi che le richiamano snellendone il codice e aiuta a dividere la risoluzione di un problema in sottoproblemi.
La sintassi di una funzione in in generale è:
INFO
tipo_ritorno nome_funzione (elenco_parametri) {
istruzioni;
return valore_restituito;
}
Dove:
void
come valore di ritorno.Parametri per valore: i parametri passati per valore vanno specificati all’interno delle parentesi tonde dopo il nome della funzione specificando per ogni parametro il nome preceduto dalla sua tipologia; quando sono presenti più parametri vanno separati da virgola. Quando si passa un parametro in questo modo all’inizio dell’esecuzione della funzione il valore memorizzato all’interno della variabile passata come parametro viene copiato in una nuova variabile della funzione. I parametri passati per valore possono essere anche opzionali, ovvero si possono creare funzioni che possono ricevere un numero diverso di parametri; questo si fa assegnando ad alcuni parametri dei valori di default.
Parametri per riferimento: in C non esistono i riferimenti come in C++; per ottenere lo stesso effetto si utilizza il passaggio di puntatori. Una funzione riceve quindi l’indirizzo di memoria della variabile e, dereferenziando il puntatore (*), può modificare direttamente il valore della variabile del programma chiamante.
Ad esempio:
#include <stdio.h>
void funzione(int valore, int *riferimento) {
valore++; // incremento solo la copia
(*riferimento)++; // incremento il contenuto della variabile puntata
}
int main() {
int x = 0;
int y = 0;
funzione(x, &y);
printf("%d\n", x); // -> 0, perche' x è passato per valore
printf("%d\n", y); // -> 1, perche' y è passato per "riferimento" (tramite puntatore)
return 0;
}