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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Il secondo o<strong>per</strong>ando viene valutato solo se il primo è vero; se il primo è falso il risultato è già<br />

noto, quindi il secondo o<strong>per</strong>ando non viene valutato.<br />

Per esempio 2 :<br />

if (strptr && strptr->methods && strptr->methods->print)<br />

strptr->methods->print(strptr);<br />

• il puntatore a funzione print è contenuto nella struttura methods<br />

• a sua volta methods è contenuta nella struttura strptr<br />

Il metodo print viene chiamato solo se nessun puntatore in gioco è nullo:<br />

• controlla che strptr non sia nullo;<br />

• controlla che methods non sia nullo;<br />

• controlla che print non sia nullo.<br />

L’AND vale 1 solo se TUTTI i puntatori sono diversi da 0.<br />

6.28 OR logico<br />

o<strong>per</strong>atore ||<br />

sintassi espr1 || espr2<br />

n. o<strong>per</strong>andi 2<br />

barra verticale – barra verticale<br />

utilizzo il risultato vale 1 se almeno uno degli o<strong>per</strong>andi sono veri (cioè<br />

diversi da zero), altrimenti il risultato è zero<br />

associativita’ =⇒<br />

commutativita’ SI’/NO<br />

Se il primo o<strong>per</strong>ando è diverso da zero, il secondo o<strong>per</strong>ando non viene valutato.<br />

Una nota sulla commutatività: dal punto di vista logico, invertire gli o<strong>per</strong>andi non causa<br />

nessuna variazione sul risultato logico dell’o<strong>per</strong>azione. In particolari casi di utilizzo dell’o<strong>per</strong>atore,<br />

<strong>per</strong>ò, l’ordine può avere rilevanza, come nel caso seguente 3 :<br />

if (v[i] || fill_item(&v[i], i) || set_default(&v[i])) {<br />

/* lavoro sulla struttura puntata da v[i] */<br />

}<br />

dove v[i] è l’i-esimo elemento di un vettore di puntatori. Il puntatore viene utilizzato all’interno<br />

del blocco condizionale, ma deve essere non-nullo <strong>per</strong>chè lo si possa utilizzare correttamente.<br />

Così l’istruzione condizionale serve <strong>per</strong> assicurarsi che almeno una delle tre condizioni si verifichi<br />

<strong>per</strong> l’inizializzazione del puntatore i-esimo. E l’ordine di valutazione è importante in quanto<br />

2 Vedi programma di esempio and.c.<br />

3 Vedi programma di esempio or.c.<br />

71

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

Saved successfully!

Ooh no, something went wrong!