Linguaggio C: differenze tra le versioni

Jump to navigation Jump to search
1 880 byte aggiunti ,  5 anni fa
 
=== Puntatori e funzioni ===
==== Passaggio dei parametri per riferimento ====
I parametri in C vengono passati alle funzioni per valore. Questo significa che durante l'esecuzione di un programma ogni chiamata ad una funzione dovrà ricevere una copia di tali parametri. Inoltre, ogni volta che la funzione tenterà di modificare un parametro ricevuto, questa avrà effetto solo all'interno della funzione stessa; possiamo dire che avrà effetto sulla copia del parametro e non sull'originale.
Esistono ovviamente casi in cui c'è la necessità di dover modificare una variabile passata a una funzione e altri casi in cui un passaggio per valore sarebbe troppo dispendioso nel caso di grandi quantità di dati.
Il C permette di simulare un passaggio per riferimento alle funzioni attraverso l'uso dei puntatori. La funzione non riceverà più una copia della variabile ma l'indirizzo di tale variabile. In questo modo ogni modifica sul parametro passato avrà effetto anche sulla variabile originale.
Consideriamo il classico esempio della funzione swap che scambia due variabili. Nella prima versione i parametri sono passati per valore, nella seconda vengono passati per riferimento.
 
<source lang="C">
Swap V 1 - Passagio per valore
 
void swap (int, int);
 
int main(){
int a = 10;
int b = 5;
printf("a=%d\nb=%d\n", a, b);
printf("Swap..\n");
swap (a, b);
printf("a=%d\nb=%d\n", a, b);
return 0;
}
 
void swap (int x, int y){
int tmp;
tmp = x;
x = y;
y = tmp;
}
 
OUTPUT
a = 10
b = 5
 
Swap..
a = 10
b = 5
 
</source>
 
<source lang="C">
Swap V 2 - Passagio per riferimento
 
void swap (int *, int *);
 
int main(){
int a = 10;
int b = 5;
printf("a=%d\nb=%d\n", a, b);
printf("Swap..\n");
swap (&a, &b);
printf("a=%d\nb=%d\n", a, b);
return 0;
}
 
void swap (int *x, int *y){
int tmp;
tmp = *x;
*x = *y;
*y = tmp;
}
 
OUTPUT
a = 10
b = 5
 
Swap..
a = 5
b = 10
 
</source>
 
=== Array e puntatori ===
22

contributi

Menu di navigazione