18.08.2013 Views

Dalla A alla Z passando per C - Robotica

Dalla A alla Z passando per C - Robotica

Dalla A alla Z passando per C - Robotica

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

}<br />

int *q, *r = &z; /* due puntatori, uno vale l’.ind. di z */<br />

*q = y; /* errore: il puntatore non è stato assegnato */<br />

*r = y; /* corretto: r è l’indirizzo di z, quindi assegno z */<br />

if (x) return p; /* corretto: la memoria allocata rimane disponibile */<br />

else return &z; /* errore: all’esterno di f non posso usare z */<br />

10.4 Variabili auto<br />

Tutti gli esempi visti trattavano variabili definite, implicitamente, auto. Appartengono a questa<br />

classe le variabili locali ad un blocco, le quali vengono allocate durante l’esecuzione del blocco<br />

nel quale sono dichiarate e rilasciate al termine dello stesso, non possono <strong>per</strong>ciò essere utilizzate<br />

all’esterno del blocco di definizione.<br />

funzione()<br />

{<br />

auto int x=10; /* inizializzata */<br />

auto int y;<br />

/* non inizializzata: il valore<br />

* che assume è del tutto casuale<br />

*/;<br />

}<br />

/* di fatto il programma poteva<br />

* essere scritto in modo<br />

* equivalente<br />

int x, y;<br />

x=10;<br />

* auto può generalmente essere<br />

* omesso<br />

* si noti che array e strutture<br />

* locali non possono essere<br />

* inizializzati<br />

*/<br />

10.5 Variabili register<br />

La classeregister avverte il compilatore che le variabili associate dovrebbero essere memorizzate<br />

in registri della CPU. A causa delle risorse limitate tale richiesta non viene necessariamente<br />

rispettata.<br />

Fondamentalmente, l’uso della classe register è un tentativo di migliorare la velocità di<br />

esecuzione, ovvero è una cosiddetta “direttiva di ottimizzazione”. In genere vengono definite<br />

register le variabili di un ciclo.<br />

{<br />

register int i;<br />

for(i=0; i< 10; i++) {<br />

105

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!