Dalla A alla Z passando per C - Robotica
Dalla A alla Z passando per C - Robotica
Dalla A alla Z passando per C - Robotica
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
È un errore fare assegnamenti tra puntatori di tipo diverso, così come è un errore fare o<strong>per</strong>azioni<br />
aritmetiche tra puntatori di tipo diverso. È comunque possibile convertire un puntatore da un<br />
tipo ad un’altro, ma anche un puntatore in numero intero e viceversa; queste conversioni non<br />
provocano la generazione di codice macchina, <strong>per</strong>ché comunque nel processore i puntatori sono<br />
rappresentati da numeri interi, ma sono necessarie <strong>per</strong> la pulizia semantica del codice sorgente.<br />
È sempre consentito l’assegnamento di un puntatore-a-void a qualunque altro tipo di puntatore,<br />
come pure l’assegnamento di qualunque puntatore ad un puntatore-a-void. Questo <strong>per</strong>ché il<br />
tipo “void *” è quello che normalmente si usa <strong>per</strong> gestire indirizzi generici di memoria, o<strong>per</strong>azione<br />
comunissima nei sistemi o<strong>per</strong>ativi e nelle librerie di sistema.<br />
Se sono state fatte le seguenti dichiarazioni e istruzioni:<br />
int vet[100];<br />
int *p, *q;<br />
int x, y, z, i;<br />
p = &vet[0];<br />
le seguenti istruzioni sono equivalenti:<br />
x = vet[0]; x = *p; x = *vet;<br />
y = vet[i]; y = *(p+i); y = *(vet + i);<br />
vet[i] = z; *(p+i) = z; *(vet + i) = z;<br />
q = &vet[0]; q = p; q = vet;<br />
8.2 L’o<strong>per</strong>atore sizeof<br />
L’o<strong>per</strong>atore sizeof, applicato ad un tipo, ad un nome di variabile o ad un’espressione, ritorna<br />
la dimensione in byte dell’oggetto indicato. Tale calcolo viene effettuato in compilazione in base<br />
al tipo di dato che viene passato a sizeof. Se incremento un puntatore p, il suo valore numerico<br />
(indirizzo in memoria in byte) viene incrementato di sizeof(*p).<br />
Esempio:<br />
int i, v[10], *p; /* le stesse variabili di prima */<br />
i = sizeof(int); /* normalmente 4, ma può essere 8, oppure 2 */<br />
i = sizeof(i); /* come sopra */<br />
i = sizeof(v[0]); /* come sopra */<br />
i = sizeof(*p); /* come sopra */<br />
i = sizeof(p); /* 4 (dimensione del puntatore), oppure 8 */<br />
i = sizeof(v); /* 40, oppure 80, oppure 20 */<br />
i = sizeof(v)/sizeof(*v); /* 10: il numero di elementi nel vettore v */<br />
#define ARRAY_SIZE(x) (sizeof(x)/sizeof(*x)) /* una comoda macro */<br />
8.3 Le stringhe<br />
Una stringa costante è una sequenza di 0 o più caratteri racchiusi fra doppi apici. Per esempio:<br />
"Questa e‘ una stringa"<br />
"Le due stringhe in fase di compilazione"<br />
" saranno concatenate"<br />
91