Sostieni AppuntiFacili con una piccola donazione su PayPal
Dona con PayPalLe funzioni in C sono blocchi di codice riutilizzabili che permettono di:
Possiamo immaginare una funzione come un “mini-programma” interno al programma principale.
La sintassi di una funzione in in generale è:
tipo_ritorno nome_funzione (elenco_parametri) {
istruzioni;
return valore_restituito;
}
Dove:
void come valore di ritorno.#include <stdio.h>
int somma(int a, int b) {
return a + b;
}
int main() {
int r = somma(3, 5);
printf("%d\n", r);
return 0;
}
#include <stdio.h>
void saluta() {
printf("Ciao!\n");
}
int main() {
saluta();
return 0;
}
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.
La funzione riceve una copia del valore.
void incrementa(int x) {
x++;
}
La variabile originale NON cambia.
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.
In C si usa l’indirizzo di memoria.
void incrementa(int *x) {
(*x)++;
}
#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;
}
In C, quando passi un array a una funzione:
void funzione(int array[], int size)
oppure:
void funzione(int *array, int size)
#include <stdio.h>
void stampaArray(int array[], int size) {
for(int i = 0; i < size; i++) {
printf("%d ", array[i]);
}
}
int main() {
int numeri[5] = {1, 2, 3, 4, 5};
stampaArray(numeri, 5);
return 0;
}
#include <stdio.h>
void raddoppia(int array[], int size) {
for(int i = 0; i < size; i++) {
array[i] = array[i] * 2;
}
}
int main() {
int numeri[3] = {1, 2, 3};
raddoppia(numeri, 3);
return 0;
}
Qui l’array originale viene modificato.
Cosa sono le funzioni in C?
Cosa succede quando passi un array a una funzione?
Cosa fa il passaggio per valore?
Cosa permette il puntatore in una funzione?
Qual è la sintassi corretta per un array in funzione?
Esercizi con le funzioni in C/C++
Scrivere una funzione che calcola la somma di un array.
#include <stdio.h>
int somma(int array[], int size) {
int s = 0;
for(int i = 0; i < size; i++) {
s += array[i];
}
return s;
}
int main() {
int numeri[4] = {1, 2, 3, 4};
printf("Somma = %d", somma(numeri, 4));
return 0;
}Scrivere una funzione che trova il valore massimo.
#include <stdio.h>
int massimo(int array[], int size) {
int max = array[0];
for(int i = 1; i <details size; i++) {
if(array[i] > max) {
max = array[i];
}
}
return max;
}Invertire un array tramite funzione.
#include <stdio.h>
void inverti(int array[], int size) {
int temp;
for(int i = 0; i < size / 2; i++) {
temp = array[i];
array[i] = array[size - 1 - i];
array[size - 1 - i] = temp;
}
}