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.

8.5 Argomenti del programma<br />

La funzione main ha due parametri che convenzionalmente si chiamano argc e argv definiti<br />

rispettivamente come int e char **.<br />

int main(int argc, char ** argv);<br />

oppure<br />

int main(int argc, char * argv[]);<br />

La prima variabile memorizza il numero di argomenti sulla riga di comando, la seconda memorizza<br />

l’indirizzo del primo elemento di un vettore di puntatori a carattere. Ogni puntatore fa riferimento<br />

al primo carattere di ogni argomento. Supponiamo di avere il programmasaluta e di richiamarlo<br />

con la riga di comando:<br />

$ saluta Tizio, Caio<br />

In questo caso argc vale 3, e<br />

• ad argv[0] è associata la stringa “saluta”<br />

• ad argv[1] “Tizio,” (notare la presenza della virgola)<br />

• ad argv[2] “Caio”<br />

8.6 Puntatori a funzione<br />

Come nel caso dei vettori, una funzione viene rappresentata dall’indirizzo del codice associato;<br />

tutte le volte che si usa un nome di funzione in un programma si sta in pratica usando il puntatore<br />

a tale funzione. L’uso più consueto di un puntatore a funzione è l’applicazione dell’o<strong>per</strong>atore<br />

parentesi-tonde, situazione che normalmente non viene pensata in termini di puntatori ed o<strong>per</strong>atori<br />

da parte del programmatore. Un puntatore a funzione può anche essere assegnato ad<br />

altri puntatori, <strong>per</strong> esempio all’interno di strutture dati che definiscono i metodi con cui o<strong>per</strong>are<br />

sugli oggetti, oppure passato come argomento a altre funzioni, <strong>per</strong> esempio la funzione di libreria<br />

qsort, funzione che implementa l’algoritmo “quick sort” su un vettore. Il compilatore verifica in<br />

compilazione che i tipi dei puntatori a funzione siano compatibili, cioè le funzioni come dichiarate<br />

ricevano gli stessi argomenti. Esempio:<br />

#include /* <strong>per</strong> la dichiarazione di strcmp */<br />

#include /* <strong>per</strong> la dichiarazione di qsort */<br />

char *strings[100]; /* definisco un vettore di 100 puntatori */<br />

strcmp(strings[0], strings[1]); /* confronto due stringhe */<br />

/* chiamo qsort dicendo che strcmp() è la funzione di confronto da usare */<br />

qsort(strings, 100, sizeof(char *), strcmp);<br />

strncmp(strings[0], strings[1], 5); /* confronto solo i primi 5 caratteri */<br />

/* questo invece è un errore, <strong>per</strong>ché strncmp riceve tre argomenti */<br />

qsort(strings, 100, sizeof(char *), strncmp);<br />

94

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

Saved successfully!

Ooh no, something went wrong!