Dalla A alla Z passando per C - Robotica
Dalla A alla Z passando per C - Robotica
Dalla A alla Z passando per C - Robotica
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