Vuoi diventare uno sviluppatore Apple? Con YourLifeUpdated potrai apprendere le basi della programmazione in Objective-C e il design pattern MVC! Parte 7: Passare i parametri alle funzioni, per valore o per riferimento?

xcode

Amici di YourLifeUpdated.net benvenuti alla settima lezione della nostra nuova iniziativa e bensì ” Impara a programmare app per iPhone, iPad e Mac con YourLifeUpdated! “.

Abbiamo precedente parlato delle variabili, delle operazioni matematiche e come dichiarare una funzione. Manca un’argomento molto importante, fondamentale in programmazione e cioè come passare i parametri alle funzioni.

I puntatori

Le variabili di tipo puntatore contengono l’indirizzo di altre variabili, oggetti e funzioni. Si dichiarano con la seguente notazione:



int *puntatore;

Notate che va inserito un asterisco tra il tipo ed il nome della variabile, sono valide anche le seguenti dichiarazioni:

int* puntatore;

int * puntatore;

Come si ottiene l’indirizzo di memoria una variabile?

Per ottenere l’indirizzo di memoria di una variabile basta anteporre alla variabile l’operatore “&” ed assegnare il valore alla rispettiva variabile, come nell’esempio:

int a=2; int *puntatore=&a;

Come sono organizzati i dati in memoria? Una dichiarazione del genere:

int a=2;

In memoria verrà rappresentata come 1956875 2, dove il primo valore è l’indirizzo e il secondo è il valore. Per afferrare il concetto effettuate le seguenti prove, utilizzate printf per visualizzare il contenuto delle variabili:

printf("%d", a); // verrà stampato 2 printf("%d", &a); // verrà stampato l'indirizzo di a 1956875 printf("%d", puntatore); // verrà stampato l'indirizzo di a 1956875 printf("%d", *puntatore); // verrà stampato 2 printf("%d", &puntatore); // verrà stampato l'indirizzo del puntatore 1946985

Un esercizio? =D Scrivete una funzione che riceve un puntatore ad intero e ne stampa il valore!  Passare i parametri ad una funzione per valore o per riferimento? Passare i parametri ad una funzione per valore significa appunto passare il valore della variabile mentre passare i parametri ad una funzione per riferimento significa appunto passare alla funzione l’indirizzo delle variabili. Esempio: Supponiamo di avere due variabili a e b con valori rispettivamente 2 e 3

void func(int a, int b){ a=b; printf("%d", a); } printf("%d", a);

Con prima chiamata a printf verrà visualizzato il nuovo valore di a e cioè 3, mentre con la seconda chiamata (notate che è esterna alla funzione) verrà visualizzato il vecchio valore di a. Quando si passano i parametri ad una funzione per valore  questi verranno modificati solo nell’ambito del corpo della funzione mentre la modifica non avrà effetto all’esterno della funzione. Se invece passiamo i parametri ad una funzione per riferimento lavoreremo con gli indirizzi di memoria e quindi avremo la possibilità di modificare il valore delle variabili. Esempio: Supponiamo di avere due variabili a e b con valori rispettivamente 2 e 3

void func(int *a, int *b){ *a=*b; printf("%d", *a); } printf("%d", *a);

Se eseguite il programma noterete che in entrambe le chiamate a printf verrà visualizzato il valore 3! Infatti la funzione fune riceve sta volta due puntatori a interi e cioè gli indirizzi di memoria di a e b, ci serviamo quindi dell’operatore “*”  per accedere ai valori delle variabili! Esercizio “per casa” ! =D Scrivere una funzione swap che riceve due puntatori ad intero e ne scambia i valori. Non preoccupatevi, ecco la soluzione! main Alla prossima!