Passaggio dei parametri di una funzione in C

Scopriamo in che modo possiamo passare i parametri ad una funzione.

Passaggio per valore

Se scriviamo un semplice programma con delle funzioni ci accorgeremo presto che le variabili passate come parametri non cambiano di valore al di fuori della funzione.

#include <stdio.h>

void aggiungiUno(int);

int main(){
  int n = 100;

  aggiungiUno( n );

  printf("n: %d \n",n);

return 0;
}

void aggiungiUno(int x){
  x = x + 1;
}
n: 100

Questo succede perché quando viene creato il record di attivazione della funzione aggiungiUno, il valore della variabile n viene copiato nel parametro x. Questo è chiamato passaggio per valore.

Stack raffigurante il passaggio per valore

Passaggio per riferimento

Per modificare anche il valore di n possiamo utilizzare un puntatore.

#include <stdio.h>

void aggiungiUno(int*);

int main(){
    int n = 100;

    aggiungiUno( &n );

    printf("n: %d \n",n);

return 0;
}

void aggiungiUno(int *x){
    *x = *x + 1;
}
n: 101

Così facendo stiamo andando a modificare direttamente il valore di n. Questo viene chiamato passaggio per riferimento.

stack raffigurante il passaggio parametri per riferimento