[C] Valori, riferimenti, puntatori e funzioni
Un piccolo memo di come si utilizzano i puntatori nei vari casi.Sono presenti funzioni per passare variabili, array e strutture alle funzioni, rispettivamente per valore (o copia) e per riferimento. La differenza sta nel fatto che passando una variabile per valore, il suo contenuto viene modificato solamente all’interno della funzione chiamata, mantenendo inalterato il proprio valore dentro la funzione chiamante. Segue il codice:
#include <stdio.h>
typedef struct {
int d;
char c;
} s;
void pvv(int);
void pvr(int*);
void ppv(int*);
void par(int*);
void psr(s*);
int main() {
int a = 1;
printf(“init - La variabile a vale %d\n”, a); /* 1 */
pvv(a);
printf(“pvv - La variabile a vale %d\n”, a); /* 1 */
pvr(&a);
printf(“pvr - La variabile a vale %d\n”, a); /* 2 */
int* p = &a;
ppv(p);
printf(“ppv - La variabile a vale %d\n”, a); /* 3 */
int ar[10];
par(ar);
printf(“par - La variabile ar[0] vale %d\n”, ar[0]); /* 10 */
printf(“par - La variabile ar[1] vale %d\n”, ar[1]); /* 20 */
s s1;
s1.d=5;
psr(&s1);
printf(“pvs - La variabile s1.i vale %d. s1.c vale %c\n”, s1.d, s1.c); /* 20 */
return 0;
}
/* Passaggio di variabile per valore */
void pvv(int a) {
a = 2;
}
/* Passaggio di variabile per riferimento */
void pvr(int* a) {
*a = 2;
}
/* Passaggio di puntatore per valore */
void ppv(int* p) {
*p = 3;
}
/* Passaggio di array per riferimento */
void par(int ar[10]) {
*ar=10; /* il nome dell’array è un puntatore alla prima locazione */
ar[1]=20;
}
/* Passaggio di struct per riferimento */
void psr(s* s1) {
s1->d=10;
(*s1).c=‘a’; /*Scrivere s1->d è equivalente a (*s1).d */
}
Postato in: programmazione