PDA

View Full Version : [C] passaggio parametri a funzioni


Joker91
21-03-2012, 16:30
vorrei dei chiaramenti sul passaggio dei parametri tramite riferimento... Mettiamo che ho un puntatore a un array di caratteri e un puntatore a una struct. Dunque:

char* p;
struct_t* struttura;

Ora ho una funzione dove voglio sia modificare il puntatore p (cioe alla fine della funzione dev'essere avanzato di tot elementi dell'array) sia modificare la struct. E queste modifiche devono esser visibili ad ambiente globale, per questo passo per riferimento. Mettiamo in oltre la condizione che queste robe non posso returnarle perche' devo returnare gia' qualcos'altro.

Il prototipo della funzione e' dunque: funzione(char *p, struct_t* struttura);


Quindi come dovrei scrivere quando chiamo la funzione?

funzione ( &p, &struttura ) oppure funzione(p, struttura) ?

Vi sarei grato se oltre a dirmi quale usare mi diceste la differenza fra le due. :D

rootshooter
21-03-2012, 17:30
Provo a risponderti io, vedi se ti č chiaro e casomai chiedimi ;)

Hai un puntatore a char:

char* p;

Se vuoi modificare il puntatore p globale, devi passarlo per riferimento alla funzione. Quindi quello che passerai alla funzione č un puntatore ad un puntatore. Il prototipo della funzione č:

void doSomething(char** p);

Quando richiamerai la funzione passerai allora l'indirizzo di p:

doSomething(&p);

Per chiarezza riscrivo in modo da avere un nome della variabile locale della funzione diverso;

char stringa[12] = "Hello World!";

Usando questa notazione sappiamo che la variabile stringa in realtā č un puntatore a char. Quindi se proviamo:

printf("%c", *stringa);

verrā stampato il carattere H. Adesso vogliamo avanzare il puntatore 1 tramite questa funzione:

void avanzaP(char** puntatoreApuntatore){
(*puntatoreApuntatore)++ ;
}

Nel main la richiamiamo passando l'indirizzo del puntatore a char

avanzaP(&stringa);

Adesso provando a stampare:

printf("%c", *stringa);

verrā stampato il carattere successivo al precedente.

E per provare a questo punto ti consiglio di vedere cosa succede ad usare la notazione vettoriale, per esempio con un for che itera tutti gli elementi originali. ;)