C/Blocchi e funzioni/Funzioni
Wikibooks, manuali e libri di testo liberi.
[modifica] Sintassi
Le funzioni in C si dichiarano in questo modo:
tipo_restituito nomeDellaFunzione(tipo1 par1, tipo2 par2,..., tipoN parN) { istruzione1; istruzione2; istruzioneN; return valoreDaRestituire; }
Se il tipo di valore da restituire è void, indica che non viene restituito nessun valore.
In questo caso l'istruzione return è facoltativa. Può servire per un'uscita prematura, cioè per terminare la funzione prima di giungere alla fine.
Se la funzione è stata dichiarata per restituire void, essa non restituirà alcun valore: l'istruzione return delle funzioni che rendono un void non ammette parametri.
La parentesi aperta subito seguita da quella chiusa indica che alla funzione non sono passati parametri. I vecchi compilatori C non accettano una parentesi aperta e una chiusa con niente in mezzo per indicare che non si restituiscono parametri: per ottenere ciò si deve indicare fra le parentesi void.
Esempio:
int main () { int a; a=doubleof(2); printf("%d", a); return 0; } int doubleof(int x) { return x*2; }
Questo piccolo programma stamperà 4. main è la funzione principale che viene chiamata all'avvio del programma.
[modifica] Funzioni e puntatori
Se ad una funzione viene passato un puntatore, essa sarà in grado di modificare il valore puntato dal puntatore. Per esempio:
int main () { int a=2; doubleof(&a); printf("%d", a); return 0; } void doubleof(int *x) { * x = (* x) * 2; }
Questa piccola applicazione stamperà 4. Ecco come:
int a=2;Questa istruzione dichiara una variabile intera a e la inizializza con il valore 2.doubleof(&a);Chiama la funzionedoubleof, passandole l'indirizzo della variabile a.- Dentro
doubleofviene eseguita l'istruzione* x = (* x) * 2;, che assegna alla variabile puntata da x (a) il valore della stessa variabile puntata da x moltiplicato per 2. printf("%d", a);Stampa il valore ottenuto.
Se invece il nostro programma fosse stato così, avrebbe restituito 2.
int main () { int a=2; doubleof(a); printf("%d", a); return 0; } void doubleof(int x) { x = x*2; }
Per una maggiore comprensione di questo paragrafo, e per una descrizione dei puntatori a funzione, si consiglia la lettura della sezione dedicata ai puntatori.

