[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 */

}

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: