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.
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