introduzione al linguaggio c uso delle funzioni. introduzione al linguaggio c uso delle funzioni...

152
troduzione al linguaggio C Uso delle funzioni Uso delle funzioni

Upload: domenico-battaglia

Post on 02-May-2015

233 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

Uso delle funzioni

Uso delle funzioni

Page 2: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

Uso delle funzioni

Copyright © 1997 by Mario G. Montobbio

All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form or by any means, electronic, mechanical, photocopying, recording, or otherwise, without the prior written permission of the author.

Mario G. Montobbio

mailto:[email protected]

Permission to use, copy and distribute this publication for the purposes of research or private study without fee is hereby granted, provided that this copyright notice and this permission notice appear in all copies.

Page 3: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

Funzione di partenza

Funzione di partenza

Page 4: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

Funzione di partenza

Costruiamo una semplice applicazione C che stampa due valori ...

main

Valore1 = 5Valore2 = 10

Stampa valori originali

Transito = Valore 1Valore 1 = Valore 2Valore 2 = Transito

Stampa valori scambiati

end

Page 5: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

Funzione di partenza

... poi scambia i valori fra di loro ...

main

Valore1 = 5Valore2 = 10

Stampa valori originali

Transito = Valore 1Valore 1 = Valore 2Valore 2 = Transito

Stampa valori scambiati

end

Page 6: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

Funzione di partenza

main

Valore1 = 5Valore2 = 10

Stampa valori originali

Transito = Valore 1Valore 1 = Valore 2Valore 2 = Transito

Stampa valori scambiati

end

... poi li ri-stampa dopo lo scambio.

Page 7: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

Funzione di partenza

Costruiamo due versioni di questa applicazione: la prima versione è composta da un’unica funzione main ...

main

Valore1 = 5Valore2 = 10

Stampa valori originali

Transito = Valore 1Valore 1 = Valore 2Valore 2 = Transito

Stampa valori scambiati

end

Page 8: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

Funzione di partenza

main

Valore1 = 5Valore2 = 10

Stampa valori originali

Transito = Valore 1Valore 1 = Valore 2Valore 2 = Transito

Stampa valori scambiati

end

... nella seconda applicazione isoliamo il passo di scampio dei valori in una funzione Scambio poiché pensiamo che in altre applicazioni ci capiterà di scambiare due valori.

Page 9: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

Funzione di partenza

main

Valore1 = 5Valore2 = 10

Stampa valori originali

Scambio

Stampa valori scambiati

end

... nella seconda applicazione isoliamo il passo di scampio dei valori in una funzione Scambio poiché pensiamo che in altre applicazioni ci capiterà di scambiare due valori.

Page 10: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 main (void)

3 {

4 int aValore1 = 5;

5 int aValore2 = 10;

6 int aTransito;

7 printf

8 (“Valori originali, Val1 = %d, Val2 = %d.\n”

9 ,aValore1, aValore2);

... ...

Funzione di partenza

Questa è l’applicazione C in un’unica funzione main.

Page 11: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 main (void)

3 {

4 int aValore1 = 5;

5 int aValore2 = 10;

6 int aTransito;

7 printf

8 (“Valori originali, Val1 = %d, Val2 = %d.\n”

9 ,aValore1, aValore2);

... ...

Funzione di partenza

Dichiariamo un’area intera denominata aValore1 e la inizializziamo al valore 5.

Page 12: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 main (void)

3 {

4 int aValore1 = 5;

5 int aValore2 = 10;

6 int aTransito;

7 printf

8 (“Valori originali, Val1 = %d, Val2 = %d.\n”

9 ,aValore1, aValore2);

... ...

Funzione di partenza

Dichiariamo un’area intera denominata aValore2 e la inizializziamo al valore 10.

Page 13: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 main (void)

3 {

4 int aValore1 = 5;

5 int aValore2 = 10;

6 int aTransito;

7 printf

8 (“Valori originali, Val1 = %d, Val2 = %d.\n”

9 ,aValore1, aValore2);

... ...

Funzione di partenza

Riserviamo un’area intera denominata aTransito che useremo come area di transito per lo scambio dei valori.

Page 14: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 main (void)

3 {

4 int aValore1 = 5;

5 int aValore2 = 10;

6 int aTransito;

7 printf

8 (“Valori originali, Val1 = %d, Val2 = %d.\n”

9 ,aValore1, aValore2);

... ...

Funzione di partenza

Stampiamo i valori prima dello scambio.

Page 15: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

10 aTransito = aValore1;

11 aValore1 = aValore2;

12 aValore2 = aTransito;

13 printf

14 (“Valori scambiati, Val1 = %d, Val2 = %d.\n”

15 ,aValore1, aValore2);

16 }

Funzione di partenza

Scambiamo i valori appoggiandone uno sull’area denominata aTransito.

aTransito

theParm1

theParm2

5

5

101

2

3

Page 16: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

10 aTransito = aValore1;

11 aValore1 = aValore2;

12 aValore2 = aTransito;

13 printf

14 (“Valori scambiati, Val1 = %d, Val2 = %d.\n”

15 ,aValore1, aValore2);

16 }

Funzione di partenza

Stampiamo i valori dopo lo scambio.

Page 17: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

Compilazione

Compilazione

Page 18: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 home/mntmgs/clang>cc prova6.c

2 home/mntmgs/clang>

Compilazione

Abbiamo introdotto il codice simbolico in prova6.c.

Page 19: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 home/mntmgs/clang>cc prova6.c

2 home/mntmgs/clang>

Compilazione

Richiamiamo il compilatore C con il comando cc.

Page 20: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 home/mntmgs/clang>cc prova6.c

2 home/mntmgs/clang>

Compilazione

Dopo la compilazione otteniamo nuovamente il prompt del sistema senza che siano stati emessi messaggi di errore: vuole dire che il codice non contiene errori.

Page 21: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

Elaborazione

Elaborazione

Page 22: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 home/mntmgs/clang>./a.out

2 Valori originali, Val1 = 5, Val2 = 10.

3 Valori scambiati, Val1 = 10, Val2 = 5.

4 home/mntmgs/clang>

Elaborazione

Poiché non abbiamo specificato un nome scelto da noi, il compilatore ha creato un modulo caricabile-eseguibile chiamato a.out ...

Page 23: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 home/mntmgs/clang>./a.out

2 Valori originali, Val1 = 5, Val2 = 10.

3 Valori scambiati, Val1 = 10, Val2 = 5.

4 home/mntmgs/clang>

Elaborazione

... che si trova nella directory corrente.

Page 24: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 home/mntmgs/clang>./a.out

2 Valori originali, Val1 = 5, Val2 = 10.

3 Valori scambiati, Val1 = 10, Val2 = 5.

4 home/mntmgs/clang>

Elaborazione

Richiamando il modulo caricabile-eseguibile a.out ora vengono emessi i valori prima e dopo lo scambio.

Page 25: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

Isolamento dello scambio in una funzione

Isolamento dello scambio in una funzione

Page 26: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 void Scambio (int theParm1, int theParm2)

3 {

4 int aTransito;

5 aTransito = theParm1;

6 theParm1 = theParm2;

7 theParm2 = aTransito;

8 }

... ...

Isolamento dello scambio in una funzione

Questa è la funzione Scambio.

Page 27: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 void Scambio (int theParm1, int theParm2)

3 {

4 int aTransito;

5 aTransito = theParm1;

6 theParm1 = theParm2;

7 theParm2 = aTransito;

8 }

... ...

Isolamento dello scambio in una funzione

La funzione Scambio ha due argomenti formali denominati theParm1, e theParm2.

Page 28: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 void Scambio (int theParm1, int theParm2)

3 {

4 int aTransito;

5 aTransito = theParm1;

6 theParm1 = theParm2;

7 theParm2 = aTransito;

8 }

... ...

Isolamento dello scambio in una funzione

L’argomento theParm1 è di tipo int ...

Page 29: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 void Scambio (int theParm1, int theParm2)

3 {

4 int aTransito;

5 aTransito = theParm1;

6 theParm1 = theParm2;

7 theParm2 = aTransito;

8 }

... ...

Isolamento dello scambio in una funzione

... ed anche l’argomento theParm2 è di tipo int.

Page 30: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 void Scambio (int theParm1, int theParm2)

3 {

4 int aTransito;

5 aTransito = theParm1;

6 theParm1 = theParm2;

7 theParm2 = aTransito;

8 }

... ...

Isolamento dello scambio in una funzione

La funzione Scambio non restituisce alcun valore alla funzione che l’ha richiamata.

Page 31: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 void Scambio (int theParm1, int theParm2)

3 {

4 int aTransito;

5 aTransito = theParm1;

6 theParm1 = theParm2;

7 theParm2 = aTransito;

8 }

... ...

Isolamento dello scambio in una funzione

Il corpo della funzione Scambio è compreso fra la coppia di parentesi graffe { }

Page 32: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 void Scambio (int theParm1, int theParm2)

3 {

4 int aTransito;

5 aTransito = theParm1;

6 theParm1 = theParm2;

7 theParm2 = aTransito;

8 }

... ...

Isolamento dello scambio in una funzione

Riserviamo un’area intera denominata aTransito che useremo come area di transito per lo scambio dei valori..

Page 33: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 void Scambio (int theParm1, int theParm2)

3 {

4 int aTransito;

5 aTransito = theParm1;

6 theParm1 = theParm2;

7 theParm2 = aTransito;

8 }

... ...

Isolamento dello scambio in una funzione

Scambiamo i valori appoggiandone uno sull’area denominata aTransito.

aTransito

theParm1

theParm2

5

5

101

2

3

Page 34: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

9 main (void)

10 {

11 int aValore1 = 5;

12 int aValore2 = 10;

13 printf

14 (“Valori originali, Val1 = %d, Val2 = %d.\n”

15 ,aValore1, aValore2);

... ...

Isolamento dello scambio in una funzione

Esaminiamo la nuova versione della funzione main.

Page 35: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

9 main (void)

10 {

11 int aValore1 = 5;

12 int aValore2 = 10;

13 printf

14 (“Valori originali, Val1 = %d, Val2 = %d.\n”

15 ,aValore1, aValore2);

... ...

Isolamento dello scambio in una funzione

Dichiariamo un’area intera denominata aValore1 e la inizializziamo al valore 5.

Page 36: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

9 main (void)

10 {

11 int aValore1 = 5;

12 int aValore2 = 10;

13 printf

14 (“Valori originali, Val1 = %d, Val2 = %d.\n”

15 ,aValore1, aValore2);

... ...

Isolamento dello scambio in una funzione

Dichiariamo un’area intera denominata aValore2 e la inizializziamo al valore 10.

Page 37: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

9 main (void)

10 {

11 int aValore1 = 5;

12 int aValore2 = 10;

13 printf

14 (“Valori originali, Val1 = %d, Val2 = %d.\n”

15 ,aValore1, aValore2);

... ...

Isolamento dello scambio in una funzione

Stampiamo i valori prima dello scambio.

Page 38: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

16 Scambio (aValore1, aValore2);

17 printf

28 (“Valori scambiati, Val1 = %d, Val2 = %d.\n”

29 ,aValore1, aValore2);

30 }

Isolamento dello scambio in una funzione

Richiamiamo la funzione Scambio ...

Page 39: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

16 Scambio (aValore1, aValore2);

17 printf

28 (“Valori scambiati, Val1 = %d, Val2 = %d.\n”

29 ,aValore1, aValore2);

30 }

Isolamento dello scambio in una funzione

... passandole gli argomenti reali fra la coppia di parentesi tonde ( ) e separati da virgole ,

Page 40: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

16 Scambio (aValore1, aValore2);

17 printf

28 (“Valori scambiati, Val1 = %d, Val2 = %d.\n”

29 ,aValore1, aValore2);

30 }

Isolamento dello scambio in una funzione

Il primo argomento reale aValore1 ...

Page 41: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 void Scambio (int theParm1, int theParm2)

3 {

4 int aTransito;

5 aTransito = theParm1;

6 theParm1 = theParm2;

7 theParm2 = aTransito;

8 }

... ...

Isolamento dello scambio in una funzione

... corrisponde al primo argomento formale theParm1 ...

Page 42: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

16 Scambio (aValore1, aValore2);

17 printf

28 (“Valori scambiati, Val1 = %d, Val2 = %d.\n”

29 ,aValore1, aValore2);

30 }

Isolamento dello scambio in una funzione

... mentre il secondo argomento reale aValore2 ...

Page 43: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 void Scambio (int theParm1, int theParm2)

3 {

4 int aTransito;

5 aTransito = theParm1;

6 theParm1 = theParm2;

7 theParm2 = aTransito;

8 }

... ...

Isolamento dello scambio in una funzione

... corrisponde al secondo argomento formale theParm2.

Page 44: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

16 Scambio (aValore1, aValore2);

17 printf

28 (“Valori scambiati, Val1 = %d, Val2 = %d.\n”

29 ,aValore1, aValore2);

30 }

Isolamento dello scambio in una funzione

Stampiamo i valori dopo lo scambio.

Page 45: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

Compilazione

Compilazione

Page 46: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 home/mntmgs/clang>cc prova7.c

2 home/mntmgs/clang>

Compilazione

Abbiamo introdotto il codice simbolico in prova7.c.

Page 47: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 home/mntmgs/clang>cc prova7.c

2 home/mntmgs/clang>

Compilazione

Richiamiamo il compilatore C con il comando cc.

Page 48: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 home/mntmgs/clang>cc prova7.c

2 home/mntmgs/clang>

Compilazione

Dopo la compilazione otteniamo nuovamente il prompt del sistema senza che siano stati emessi messaggi di errore: vuole dire che il codice non contiene errori.

Page 49: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

Elaborazione

Elaborazione

Page 50: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 home/mntmgs/clang>./a.out

2 Valori originali, Val1 = 5, Val2 = 10.

3 Valori scambiati, Val1 = 5, Val2 = 10.

4 home/mntmgs/clang>

Elaborazione

Poiché non abbiamo specificato un nome scelto da noi, il compilatore ha creato un modulo caricabile-eseguibile chiamato a.out ...

Page 51: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 home/mntmgs/clang>./a.out

2 Valori originali, Val1 = 5, Val2 = 10.

3 Valori scambiati, Val1 = 5, Val2 = 10.

4 home/mntmgs/clang>

Elaborazione

... che si trova nella directory corrente.

Page 52: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 home/mntmgs/clang>./a.out

2 Valori originali, Val1 = 5, Val2 = 10.

3 Valori scambiati, Val1 = 5, Val2 = 10.

4 home/mntmgs/clang>

Elaborazione

Richiamando il modulo caricabile-eseguibile a.out ora vengono emessi i valori prima e dopo lo scambio.

Page 53: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 home/mntmgs/clang>./a.out

2 Valori originali, Val1 = 5, Val2 = 10.

3 Valori scambiati, Val1 = 5, Val2 = 10.

4 home/mntmgs/clang>

Elaborazione

I valori prima e dopo lo scambio sono uguali.

Page 54: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

Elaborazione

5 10?

Page 55: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

Passaggio di argomenti per valore

Passaggio argomenti per valore

Page 56: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

16 Scambio (aValore1, aValore2);

17 printf

28 (“Valori scambiati, Val1 = %d, Val2 = %d.\n”

29 ,aValore1, aValore2);

30 }

Passaggio di argomenti per valore

Il richiamo della funzione Scambio ...

Page 57: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

16 Scambio (aValore1, aValore2);

17 printf

28 (“Valori scambiati, Val1 = %d, Val2 = %d.\n”

29 ,aValore1, aValore2);

30 }

... ...

2 void Scambio (int theParm1, int theParm2)

3 {

4 int aTransito;

... ...

Passaggio di argomenti per valore

... valorizza theParm1 con il contenuto di aValore1 ...

theParm1aValore15

Page 58: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

16 Scambio (aValore1, aValore2);

17 printf

28 (“Valori scambiati, Val1 = %d, Val2 = %d.\n”

29 ,aValore1, aValore2);

30 }

... ...

2 void Scambio (int theParm1, int theParm2)

3 {

4 int aTransito;

... ...

Passaggio di argomenti per valore

... e valorizza theParm2 con il contenuto di aValore2 ...

theParm2aValore210

Page 59: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 void Scambio (int theParm1, int theParm2)

3 {

4 int aTransito;

5 aTransito = theParm1;

6 theParm1 = theParm2;

7 theParm2 = aTransito;

8 }

... ...

Passaggio di argomenti per valore

La funzione Scambio scambia i valori delle aree theParm1 e theParm2 ...

aTransito

theParm1

theParm2

5

5

10

1

2

3aValore2

aValore1 5

10

Page 60: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

9 main (void)

10 {

11 int aValore1 = 5;

12 int aValore2 = 10;

13 printf

14 (“Valori originali, Val1 = %d, Val2 = %d.\n”

15 ,aValore1, aValore2);

... ...

Passaggio di argomenti per valore

... e non quelli delle aree di partenza aValore1 e aValore2.

aValore2

aValore1

aTransito

theParm1

theParm2

5

5

105

10 3

1

2

Page 61: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 void Scambio (int theParm1, int theParm2)

3 {

4 int aTransito;

5 aTransito = theParm1;

6 theParm1 = theParm2;

7 theParm2 = aTransito;

8 }

... ...

Passaggio di argomenti per valore

Gli argomenti formali theParm1 e theParm2 sono copie delle aree aValore1 ed aValore2 ...

theParm2aValore210

theParm1aValore15

Page 62: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 void Scambio (int theParm1, int theParm2)

3 {

4 int aTransito;

5 aTransito = theParm1;

6 theParm1 = theParm2;

7 theParm2 = aTransito;

8 }

... ...

Passaggio di argomenti per valore

... e non “maschere” per accedere alle aree aValore1 ed aValore2.

theParm2

aValore2 10

theParm1

aValore1 5

Page 63: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

Nota per i programmatori COBOL

Nota per i programmatori COBOL

Page 64: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 IDENTIFICATION DIVISION.

2 PROGRAM-ID. “SCAMBIO”.

... ...

3 WORKING-STORAGE SECTION.

4 01 A-TRANSITO PIC S9(9) COMP.

5 LINKAGE SECTION.

6 01 THE-PARM1 PIC S9(9) COMP.

7 01 THE-PARM2 PIC S9(9) COMP.

8 PROCEDURE DIVISION

9 USING THE-PARM1, THE-PARM2.

10 MOVE THE-PARM1 TO A-TRANSITO.

11 MOVE THE-PARM2 TO THE-PARM1.

12 MOVE A-TRANSITO TO THE-PARM2.

... ...

Nota per i programmatori COBOL

In COBOL gli argomenti formali sono “maschere” per accedere ...

theParm2

theParm1

Page 65: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 IDENTIFICATION DIVISION.

2 PROGRAM-ID. “MAIN”.

... ...

3 WORKING-STORAGE SECTION.

4 01 A-VALORE1 PIC S9(9) COMP VALUE +5.

5 01 A-VALORE2 PIC S9(9) COMP VALUE +10.

6 PROCEDURE DIVISION.

7 CALL “SCAMBIO”

8 USING A-VALORE1,

9 A-VALORE2.

... ...

Nota per i programmatori COBOL

... con altri nomi alle aree di partenza A-VALORE1 ed A-VALORE2.

theParm2

theParm1

+5

+10

Page 66: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

Passaggio di argomenti per indirizzo

Passaggio argomenti per indirizzo

Page 67: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 void Scambio (int *theParm1, int *theParm2)

3 {

4 int aTransito;

5 aTransito = *theParm1;

6 *theParm1 = *theParm2;

7 *theParm2 = aTransito;

8 }

... ...

Passaggio di argomenti per indirizzo

In questa versione passiamo alla funzione Scambio gli indirizzi delle aree da scambiare.

Page 68: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 void Scambio (int *theParm1, int *theParm2)

3 {

4 int aTransito;

5 aTransito = *theParm1;

6 *theParm1 = *theParm2;

7 *theParm2 = aTransito;

8 }

... ...

Passaggio di argomenti per indirizzo

Gli argomenti theParm1 e theParm2 sono diventati puntatori ad aree di tipo int.

Page 69: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

16 Scambio (&aValore1, &aValore2);

17 printf

28 (“Valori scambiati, Val1 = %d, Val2 = %d.\n”

29 ,aValore1, aValore2);

30 }

Passaggio di argomenti per indirizzo

La funzione main passa alla funzione Scambio gli indirizzi delle area da scambiare e non una copia delle aree.

Page 70: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

16 Scambio (&aValore1, &aValore2);

17 printf

28 (“Valori scambiati, Val1 = %d, Val2 = %d.\n”

29 ,aValore1, aValore2);

30 }

Passaggio di argomenti per indirizzo

L’operatore & calcola l’indirizzo dell’area aValore1.

Page 71: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 void Scambio (int *theParm1, int *theParm2)

3 {

4 int aTransito;

5 aTransito = *theParm1;

6 *theParm1 = *theParm2;

7 *theParm2 = aTransito;

8 }

... ...

Passaggio di argomenti per indirizzo

... che viene copiato nel puntatore theParm1.

Page 72: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

16 Scambio (&aValore1, &aValore2);

17 printf

28 (“Valori scambiati, Val1 = %d, Val2 = %d.\n”

29 ,aValore1, aValore2);

30 }

Passaggio di argomenti per indirizzo

L’operatore & calcola l’indirizzo dell’area aValore2.

Page 73: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 void Scambio (int *theParm1, int *theParm2)

3 {

4 int aTransito;

5 aTransito = *theParm1;

6 *theParm1 = *theParm2;

7 *theParm2 = aTransito;

8 }

... ...

Passaggio di argomenti per indirizzo

... che viene copiato nel puntatore theParm2.

Page 74: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 void Scambio (int *theParm1, int *theParm2)

3 {

4 int aTransito;

5 aTransito = *theParm1;

6 *theParm1 = *theParm2;

7 *theParm2 = aTransito;

8 }

... ...

Passaggio di argomenti per indirizzo

Per estrarre il contenuto di aValore1 tramite il puntatore aParm1 usiamo l’operatore di de-referenziamento *

Page 75: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 void Scambio (int *theParm1, int *theParm2)

3 {

4 int aTransito;

5 aTransito = *theParm1;

6 *theParm1 = *theParm2;

7 *theParm2 = aTransito;

8 }

... ...

Passaggio di argomenti per indirizzo

Questa dichiarazione estrae il contenuto di aValore1 e lo assegna all’area aTransito.

aValore2

aValore1

aTransito

*theParm1

*theParm2

5

5

10

1

25

10 3

1

Page 76: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 void Scambio (int *theParm1, int *theParm2)

3 {

4 int aTransito;

5 aTransito = *theParm1;

6 *theParm1 = *theParm2;

7 *theParm2 = aTransito;

8 }

... ...

Passaggio di argomenti per indirizzo

Per estrarre il contenuto di aValore2 tramite il puntatore aParm2 usiamo l’operatore di de-referenziamento *

Page 77: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 void Scambio (int *theParm1, int *theParm2)

3 {

4 int aTransito;

5 aTransito = *theParm1;

6 *theParm1 = *theParm2;

7 *theParm2 = aTransito;

8 }

... ...

Passaggio di argomenti per indirizzo

Per assegnare un valore ad aValore1 tramite il puntatore aParm1 usiamo l’operatore di de-referenziamento *

Page 78: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 void Scambio (int *theParm1, int *theParm2)

3 {

4 int aTransito;

5 aTransito = *theParm1;

6 *theParm1 = *theParm2;

7 *theParm2 = aTransito;

8 }

... ...

Passaggio di argomenti per indirizzo

Questa dichiarazione estrae il contenuto di aValore2 e lo assegna all’area aValore1.

aValore2

aValore1

aTransito

*theParm1

*theParm2

5

5

10

1

210

10 3

2

Page 79: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

11 int aValore1 = 5;

12 int aValore2 = 10;

13 printf

14 (“Valori originali, Val1 = %d, Val2 = %d.\n”

15 ,aValore1, aValore2);

... ...

Passaggio di argomenti per indirizzo

Dopo l’elaborazione di questa dichiarazione il valore dell’area aValore1 è cambiato da 5 a 10.

aValore2

aValore1

aTransito

theParm1

theParm2

5

5

10

1

210

10 3

Page 80: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 void Scambio (int *theParm1, int *theParm2)

3 {

4 int aTransito;

5 aTransito = *theParm1;

6 *theParm1 = *theParm2;

7 *theParm2 = aTransito;

8 }

... ...

Passaggio di argomenti per indirizzo

Per assegnare un valore ad aValore2 tramite il puntatore aParm2 usiamo l’operatore di de-referenziamento *

Page 81: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 void Scambio (int *theParm1, int *theParm2)

3 {

4 int aTransito;

5 aTransito = *theParm1;

6 *theParm1 = *theParm2;

7 *theParm2 = aTransito;

8 }

... ...

Passaggio di argomenti per indirizzo

Questa dichiarazione estrae il contenuto di aTransito e lo assegna all’area aValore2.

aValore2

aValore1

aTransito

*theParm1

*theParm2

5

5

10

1

210

5 3

3

Page 82: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

11 int aValore1 = 5;

12 int aValore2 = 10;

13 printf

14 (“Valori originali, Val1 = %d, Val2 = %d.\n”

15 ,aValore1, aValore2);

... ...

Passaggio di argomenti per indirizzo

Dopo l’elaborazione di questa dichiarazione il valore dell’area aValore2 è cambiato da 10 a 5.

aValore2

aValore1

aTransito

theParm1

theParm2

5

5

10

1

210

5 3

Page 83: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

Puntatori a funzioni

Puntatori a funzioni

Page 84: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 void Scambio (int *theParm1, int *theParm2)

3 {

4 int aTransito;

5 aTransito = *theParm1;

6 *theParm1 = *theParm2;

7 *theParm2 = aTransito;

8 }

... ...

Puntatori a funzioni

Esaminiamo il modello della funzione Scambio ...

Page 85: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 void Scambio (int *theParm1, int *theParm2)

3 {

4 int aTransito;

5 aTransito = *theParm1;

6 *theParm1 = *theParm2;

7 *theParm2 = aTransito;

8 }

... ...

Puntatori a funzioni

... la funzione Scambio ha due argomenti di tipo int * ...

Page 86: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 #include <stdio.h>

2 void Scambio (int *theParm1, int *theParm2)

3 {

4 int aTransito;

5 aTransito = *theParm1;

6 *theParm1 = *theParm2;

7 *theParm2 = aTransito;

8 }

... ...

Puntatori a funzioni

... e non restituisce alcun valore.

Page 87: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

9 void Somma (int *theParm1, int *theParm2)

10 {

11 *theParm1 += *theParm2;

12 }

... ...

Puntatori a funzioni

Costruiamo una funzione Somma che ha lo stesso modello della funzione Scambio ...

Page 88: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

9 void Somma (int *theParm1, int *theParm2)

10 {

11 *theParm1 += *theParm2;

12 }

... ...

Puntatori a funzioni

... cioè anche la funzione Somma ha due argomenti di tipo int * ...

Page 89: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

9 void Somma (int *theParm1, int *theParm2)

10 {

11 *theParm1 += *theParm2;

12 }

... ...

Puntatori a funzioni

... e non restituisce alcun valore.

Page 90: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

9 void Somma (int *theParm1, int *theParm2)

10 {

11 *theParm1 += *theParm2;

12 }

... ...

Puntatori a funzioni

La funzione Somma estrae il contenuto di aValore2 usando il puntatore theParm2 mediante l’operatore di de-referenziamento * ...

Page 91: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

9 void Somma (int *theParm1, int *theParm2)

10 {

11 *theParm1 += *theParm2;

12 }

... ...

Puntatori a funzioni

... e lo somma al contenuto di aValore1 usando il puntatore theParm1 mediante l’operatore di de-referenziamento *.

Page 92: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

9 void Somma (int *theParm1, int *theParm2)

10 {

11 *theParm1 += *theParm2;

12 }

... ...

Puntatori a funzioni

L’operatore += incrementa il contenuto dell’area a primo membro con il contenuto dell’area a secondo membro.

Page 93: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

13 main (void)

14 {

15 void (*aFunction_Ptr[2])

16 (int *theInt1_Ptr, int *theInt2_Ptr);

17 int aValore1 = 5;

18 int aValore2 = 10;

19 int aIndex;

20 aFunction_Ptr[0] = Scambio;

21 aFunction_Ptr[1] = Somma;

... ...

Puntatori a funzioni

Costruiamo un vettore di puntatori a funzioni nel corpo della funzione main.

Page 94: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

13 main (void)

14 {

15 void (*aFunction_Ptr[2])

16 (int *theInt1_Ptr, int *theInt2_Ptr);

17 int aValore1 = 5;

18 int aValore2 = 10;

19 int aIndex;

20 aFunction_Ptr[0] = Scambio;

21 aFunction_Ptr[1] = Somma;

... ...

Puntatori a funzioni

Questo è un vettore ...

Page 95: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

13 main (void)

14 {

15 void (*aFunction_Ptr[2])

16 (int *theInt1_Ptr, int *theInt2_Ptr);

17 int aValore1 = 5;

18 int aValore2 = 10;

19 int aIndex;

20 aFunction_Ptr[0] = Scambio;

21 aFunction_Ptr[1] = Somma;

... ...

Puntatori a funzioni

... che contiene due elementi.

Page 96: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

13 main (void)

14 {

15 void (*aFunction_Ptr[2])

16 (int *theInt1_Ptr, int *theInt2_Ptr);

17 int aValore1 = 5;

18 int aValore2 = 10;

19 int aIndex;

20 aFunction_Ptr[0] = Scambio;

21 aFunction_Ptr[1] = Somma;

... ...

Puntatori a funzioni

Ogni elemento del vettore è un puntatore a funzione.

Page 97: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

13 main (void)

14 {

15 void (*aFunction_Ptr[2])

16 (int *theInt1_Ptr, int *theInt2_Ptr);

17 int aValore1 = 5;

18 int aValore2 = 10;

19 int aIndex;

20 aFunction_Ptr[0] = Scambio;

21 aFunction_Ptr[1] = Somma;

... ...

Puntatori a funzioni

Ogni funzione puntata ha due argomenti di tipo int * ...

Page 98: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

13 main (void)

14 {

15 void (*aFunction_Ptr[2])

16 (int *theInt1_Ptr, int *theInt2_Ptr);

17 int aValore1 = 5;

18 int aValore2 = 10;

19 int aIndex;

20 aFunction_Ptr[0] = Scambio;

21 aFunction_Ptr[1] = Somma;

... ...

Puntatori a funzioni

... e non restituisce alcun valore.

Page 99: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

13 main (void)

14 {

15 void (*aFunction_Ptr[2])

16 (int *theInt1_Ptr, int *theInt2_Ptr);

17 int aValore1 = 5;

18 int aValore2 = 10;

19 int aIndex;

20 aFunction_Ptr[0] = Scambio;

21 aFunction_Ptr[1] = Somma;

... ...

Puntatori a funzioni

Il primo puntatore a funzione del vettore punta alla funzione Scambio.

Page 100: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ..

13 main (void)

14 {

15 void (*aFunction_Ptr[2])

16 (int *theInt1_Ptr, int *theInt2_Ptr);

17 int aValore1 = 5;

18 int aValore2 = 10;

19 int aIndex;

20 aFunction_Ptr[0] = Scambio;

21 aFunction_Ptr[1] = Somma;

... ...

Puntatori a funzioni

Il secondo puntatore a funzione del vettore punta alla funzione Somma.

Page 101: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

13 main (void)

14 {

15 void (*aFunction_Ptr[2])

16 (int *theInt1_Ptr, int *theInt2_Ptr);

17 int aValore1 = 5;

18 int aValore2 = 10;

19 int aIndex;

20 aFunction_Ptr[0] = Scambio;

21 aFunction_Ptr[1] = Somma;

... ...

Puntatori a funzioni

Per elaborare il vettore dichiariamo un’indice che identifica l’elemento corrente.

Page 102: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

22 printf

23 ("Valori originali, Val1 = %d, Val2 = %d.\n"

24 ,aValore1, aValore2);

25 for (aIndex = 0; aIndex < 2; ++aIndex)

26 {

27 aFunction_Ptr[aIndex] (&aValore1, &aValore2);

28 printf

29 ("Valori modificati, Val1 = %d, Val2 = %d.\n"

30 ,aValore1, aValore2);

31 }

32 }

Puntatori a funzioni

Stampiamo i contenuti di aValore1 ed aValore2 prima di ogni modifica.

Page 103: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

22 printf

23 ("Valori originali, Val1 = %d, Val2 = %d.\n"

24 ,aValore1, aValore2);

25 for (aIndex = 0; aIndex < 2; ++aIndex)

26 {

27 aFunction_Ptr[aIndex] (&aValore1, &aValore2);

28 printf

29 ("Valori modificati, Val1 = %d, Val2 = %d.\n"

30 ,aValore1, aValore2);

31 }

32 }

Puntatori a funzioni

Richiamiamo in ciclo le funzioni puntate del vettore.

Page 104: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

22 printf

23 ("Valori originali, Val1 = %d, Val2 = %d.\n"

24 ,aValore1, aValore2);

25 for (aIndex = 0; aIndex < 2; ++aIndex)

26 {

27 aFunction_Ptr[aIndex] (&aValore1, &aValore2);

28 printf

29 ("Valori modificati, Val1 = %d, Val2 = %d.\n"

30 ,aValore1, aValore2);

31 }

32 }

Puntatori a funzioni

Il ciclo inizia con il primo elemento del vettore.

Page 105: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

22 printf

23 ("Valori originali, Val1 = %d, Val2 = %d.\n"

24 ,aValore1, aValore2);

25 for (aIndex = 0; aIndex < 2; ++aIndex)

26 {

27 aFunction_Ptr[aIndex] (&aValore1, &aValore2);

28 printf

29 ("Valori modificati, Val1 = %d, Val2 = %d.\n"

30 ,aValore1, aValore2);

31 }

32 }

Puntatori a funzioni

Dopo ogni ciclo incrementiamo l’indice aIndex per elaborare l’elemento seguente del vettore di puntatori.

Page 106: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

22 printf

23 ("Valori originali, Val1 = %d, Val2 = %d.\n"

24 ,aValore1, aValore2);

25 for (aIndex = 0; aIndex < 2; ++aIndex)

26 {

27 aFunction_Ptr[aIndex] (&aValore1, &aValore2);

28 printf

29 ("Valori modificati, Val1 = %d, Val2 = %d.\n"

30 ,aValore1, aValore2);

31 }

32 }

Puntatori a funzioni

Il ciclo termina quando tutti gli elementi del vettore sono stati elaborati.

Page 107: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

22 printf

23 ("Valori originali, Val1 = %d, Val2 = %d.\n"

24 ,aValore1, aValore2);

25 for (aIndex = 0; aIndex < 2; ++aIndex)

26 {

27 aFunction_Ptr[aIndex] (&aValore1, &aValore2);

28 printf

29 ("Valori modificati, Val1 = %d, Val2 = %d.\n"

30 ,aValore1, aValore2);

31 }

32 }

Puntatori a funzioni

Richiamiamo la funzione puntata dall’elemento corrente del vettore di puntatori a funzione.

Page 108: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

22 printf

23 ("Valori originali, Val1 = %d, Val2 = %d.\n"

24 ,aValore1, aValore2);

25 for (aIndex = 0; aIndex < 2; ++aIndex)

26 {

27 aFunction_Ptr[aIndex] (&aValore1, &aValore2);

28 printf

29 ("Valori modificati, Val1 = %d, Val2 = %d.\n"

30 ,aValore1, aValore2);

31 }

32 }

Puntatori a funzioni

Stampiamo i valori dopo la modifica.

Page 109: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

Compilazione

Compilazione

Page 110: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 home/mntmgs/clang>cc prova8.c

2 home/mntmgs/clang>

Compilazione

Abbiamo introdotto il codice simbolico in prova8.c.

Page 111: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 home/mntmgs/clang>cc prova8.c

2 home/mntmgs/clang>

Compilazione

Richiamiamo il compilatore C con il comando cc.

Page 112: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 home/mntmgs/clang>cc prova8.c

2 home/mntmgs/clang>

Compilazione

Dopo la compilazione otteniamo nuovamente il prompt del sistema senza che siano stati emessi messaggi di errore: vuole dire che il codice non contiene errori.

Page 113: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

Elaborazione

Elaborazione

Page 114: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 home/mntmgs/clang>./a.out

2 Valori originali, Val1 = 5, Val2 = 10.

3 Valori modificati, Val1 = 10, Val2 = 5.

4 Valori modificati, Val1 = 15, Val2 = 5.

5 home/mntmgs/clang>

Elaborazione

Poiché non abbiamo specificato un nome scelto da noi, il compilatore ha creato un modulo caricabile-eseguibile chiamato a.out ...

Page 115: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 home/mntmgs/clang>./a.out

2 Valori originali, Val1 = 5, Val2 = 10.

3 Valori modificati, Val1 = 10, Val2 = 5.

4 Valori modificati, Val1 = 15, Val2 = 5.

5 home/mntmgs/clang>

Elaborazione

... che si trova nella directory corrente.

Page 116: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 home/mntmgs/clang>./a.out

2 Valori originali, Val1 = 5, Val2 = 10.

3 Valori modificati, Val1 = 10, Val2 = 5.

4 Valori modificati, Val1 = 15, Val2 = 5.

5 home/mntmgs/clang>

Elaborazione

Richiamando il modulo caricabile-eseguibile a.out ora vengono emessi i valori prima e dopo le modifiche.

Page 117: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 home/mntmgs/clang>./a.out

2 Valori originali, Val1 = 5, Val2 = 10.

3 Valori modificati, Val1 = 10, Val2 = 5.

4 Valori modificati, Val1 = 15, Val2 = 5.

5 home/mntmgs/clang>

Elaborazione

I valori dopo la prima modifica sono stati scambiati fra loro.

Page 118: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

22 printf

23 ("Valori originali, Val1 = %d, Val2 = %d.\n"

24 ,aValore1, aValore2);

25 for (aIndex = 0; aIndex < 2; ++aIndex)

26 {

27 aFunction_Ptr[aIndex] (&aValore1, &aValore2);

28 printf

29 ("Valori modificati, Val1 = %d, Val2 = %d.\n"

30 ,aValore1, aValore2);

31 }

32 }

Elaborazione

Quando l’indice aIndex vale 0 la funzione main richiama la funzione Scambio ...

Page 119: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

13 main (void)

14 {

15 void (*aFunction_Ptr[2])

16 (int *theInt1_Ptr, int *theInt2_Ptr);

17 int aValore1 = 5;

18 int aValore2 = 10;

19 int aIndex;

20 aFunction_Ptr[0] = Scambio;

21 aFunction_Ptr[1] = Somma;

... ...

Elaborazione

... poiché il primo puntatore a funzione del vettore punta alla funzione Scambio.

Page 120: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 home/mntmgs/clang>./a.out

2 Valori originali, Val1 = 5, Val2 = 10.

3 Valori modificati, Val1 = 10, Val2 = 5.

4 Valori modificati, Val1 = 15, Val2 = 5.

5 home/mntmgs/clang>

Elaborazione

Dopo la seconda modifica il contenuto di aValore1 è stato incrementato del contenuto dell’area aValore2.

Page 121: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

22 printf

23 ("Valori originali, Val1 = %d, Val2 = %d.\n"

24 ,aValore1, aValore2);

25 for (aIndex = 0; aIndex < 2; ++aIndex)

26 {

27 aFunction_Ptr[aIndex] (&aValore1, &aValore2);

28 printf

29 ("Valori modificati, Val1 = %d, Val2 = %d.\n"

30 ,aValore1, aValore2);

31 }

32 }

Elaborazione

Quando l’indice aIndex vale 1 la funzione main richiama la funzione Somma ...

Page 122: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

... ...

13 main (void)

14 {

15 void (*aFunction_Ptr[2])

16 (int *theInt1_Ptr, int *theInt2_Ptr);

17 int aValore1 = 5;

18 int aValore2 = 10;

19 int aIndex;

20 aFunction_Ptr[0] = Scambio;

21 aFunction_Ptr[1] = Somma;

... ...

Elaborazione

... poiché il secondo puntatore a funzione del vettore punta alla funzione Somma.

Page 123: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

Elaborazione

A cosa serve

un vettore di

puntatori a

funzione?

Page 124: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

Costruzione di oggetti

Costruzione di oggetti

Page 125: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 struct Component_Tag

2 {

3 char* (*Is_Type) (void);

4 char* (*Displayable_Format) (void);

5 int (*Is_Container) (void);

6 void* (*Clonate) (void);

7 void (*Delete) (void);

8 };

Costruzione di oggetti

Il linguaggio C permette di costruire un modello di aggregato che contiene solamente puntatori a funzione.

Page 126: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 struct Component_Tag

2 {

3 char* (*Is_Type) (void);

4 char* (*Displayable_Format) (void);

5 int (*Is_Container) (void);

6 void* (*Clonate) (void);

7 void (*Delete) (void);

8 };

Costruzione di oggetti

Questi sono puntatori a funzione.

Page 127: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 struct Component_Tag

2 {

3 char* (*Is_Type) (void);

4 char* (*Displayable_Format) (void);

5 int (*Is_Container) (void);

6 void* (*Clonate) (void);

7 void (*Delete) (void);

8 };

Costruzione di oggetti

Is_Type punta ad una funzione ...

Page 128: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 struct Component_Tag

2 {

3 char* (*Is_Type) (void);

4 char* (*Displayable_Format) (void);

5 int (*Is_Container) (void);

6 void* (*Clonate) (void);

7 void (*Delete) (void);

8 };

Costruzione di oggetti

... che non ha argomenti ...

Page 129: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 struct Component_Tag

2 {

3 char* (*Is_Type) (void);

4 char* (*Displayable_Format) (void);

5 int (*Is_Container) (void);

6 void* (*Clonate) (void);

7 void (*Delete) (void);

8 };

Costruzione di oggetti

... e restituisce un puntatore a carattere.

Page 130: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 struct Component_Tag

2 {

3 char* (*Is_Type) (void);

4 char* (*Displayable_Format) (void);

5 int (*Is_Container) (void);

6 void* (*Clonate) (void);

7 void (*Delete) (void);

8 };

Costruzione di oggetti

Displayable_Format punta ad una funzione ...

Page 131: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 struct Component_Tag

2 {

3 char* (*Is_Type) (void);

4 char* (*Displayable_Format) (void);

5 int (*Is_Container) (void);

6 void* (*Clonate) (void);

7 void (*Delete) (void);

8 };

Costruzione di oggetti

... che non ha argomenti ...

Page 132: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 struct Component_Tag

2 {

3 char* (*Is_Type) (void);

4 char* (*Displayable_Format) (void);

5 int (*Is_Container) (void);

6 void* (*Clonate) (void);

7 void (*Delete) (void);

8 };

Costruzione di oggetti

... e restituisce un puntatore a carattere.

Page 133: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 struct Component_Tag

2 {

3 char* (*Is_Type) (void);

4 char* (*Displayable_Format) (void);

5 int (*Is_Container) (void);

6 void* (*Clonate) (void);

7 void (*Delete) (void);

8 };

Costruzione di oggetti

Is_Container punta ad una funzione ...

Page 134: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 struct Component_Tag

2 {

3 char* (*Is_Type) (void);

4 char* (*Displayable_Format) (void);

5 int (*Is_Container) (void);

6 void* (*Clonate) (void);

7 void (*Delete) (void);

8 };

Costruzione di oggetti

... che non ha argomenti ...

Page 135: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 struct Component_Tag

2 {

3 char* (*Is_Type) (void);

4 char* (*Displayable_Format) (void);

5 int (*Is_Container) (void);

6 void* (*Clonate) (void);

7 void (*Delete) (void);

8 };

Costruzione di oggetti

... e restituisce un valore di tipo int.

Page 136: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 struct Component_Tag

2 {

3 char* (*Is_Type) (void);

4 char* (*Displayable_Format) (void);

5 int (*Is_Container) (void);

6 void* (*Clonate) (void);

7 void (*Delete) (void);

8 };

Costruzione di oggetti

Clonate punta ad una funzione ...

Page 137: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 struct Component_Tag

2 {

3 char* (*Is_Type) (void);

4 char* (*Displayable_Format) (void);

5 int (*Is_Container) (void);

6 void* (*Clonate) (void);

7 void (*Delete) (void);

8 };

Costruzione di oggetti

... che non ha argomenti ...

Page 138: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 struct Component_Tag

2 {

3 char* (*Is_Type) (void);

4 char* (*Displayable_Format) (void);

5 int (*Is_Container) (void);

6 void* (*Clonate) (void);

7 void (*Delete) (void);

8 };

Costruzione di oggetti

... e restituisce un puntatore ad un’area di formato non specificato.

Page 139: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 struct Component_Tag

2 {

3 char* (*Is_Type) (void);

4 char* (*Displayable_Format) (void);

5 int (*Is_Container) (void);

6 void* (*Clonate) (void);

7 void (*Delete) (void);

8 };

Costruzione di oggetti

Delete punta ad una funzione ...

Page 140: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 struct Component_Tag

2 {

3 char* (*Is_Type) (void);

4 char* (*Displayable_Format) (void);

5 int (*Is_Container) (void);

6 void* (*Clonate) (void);

7 void (*Delete) (void);

8 };

Costruzione di oggetti

... che non ha argomenti ...

Page 141: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 struct Component_Tag

2 {

3 char* (*Is_Type) (void);

4 char* (*Displayable_Format) (void);

5 int (*Is_Container) (void);

6 void* (*Clonate) (void);

7 void (*Delete) (void);

8 };

Costruzione di oggetti

... e non restituisce alcun valore.

Page 142: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 char *Type_Integer (void)

2 {

3 return "Integer";

4 }

5 char *Type_Text (void)

6 {

7 return "Text";

8 }

Costruzione di oggetti

La funzione Type_Integer identifica un primo tipo logico di componente rispondendo che è di tipo Integer.

Page 143: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 char *Type_Integer (void)

2 {

3 return "Integer";

4 }

5 char *Type_Text (void)

6 {

7 return "Text";

8 }

Costruzione di oggetti

La funzione Type_Text identifica un secondo tipo logico di componente rispondendo che è di tipo Text.

Page 144: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 main (void)

2 {

3 struct Component_Tag aComp[2];

4 aComp[0].Is_Type = Type_Integer;

5 aComp[1].Is_Type = Type_Text;

6 int aIndex;

7 for (aIndex = 0; aIndex < 2; ++aIndex)

8 {

9 char * aType_Ptr = aComp[aIndex].Is_Type();

10 printf ("Type = %s\n", aType_Ptr);

11 }

12 }

Costruzione di oggetti

Dichiariamo un vettore di aggregati di tipo Component_Tag (nome del programmatore).

Page 145: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 main (void)

2 {

3 struct Component_Tag aComp[2];

4 aComp[0].Is_Type = Type_Integer;

5 aComp[1].Is_Type = Type_Text;

6 int aIndex;

7 for (aIndex = 0; aIndex < 2; ++aIndex)

8 {

9 char * aType_Ptr = aComp[aIndex].Is_Type();

10 printf ("Type = %s\n", aType_Ptr);

11 }

12 }

Costruzione di oggetti

Il puntatore a funzione Is_Type del primo elemento del vettore punta alla funzione Type_Integer.

Page 146: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 main (void)

2 {

3 struct Component_Tag aComp[2];

4 aComp[0].Is_Type = Type_Integer;

5 aComp[1].Is_Type = Type_Text;

6 int aIndex;

7 for (aIndex = 0; aIndex < 2; ++aIndex)

8 {

9 char * aType_Ptr = aComp[aIndex].Is_Type();

10 printf ("Type = %s\n", aType_Ptr);

11 }

12 }

Costruzione di oggetti

Il puntatore a funzione Is_Type del secondo elemento del vettore punta alla funzione Type_Text.

Page 147: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 main (void)

2 {

3 struct Component_Tag aComp[2];

4 aComp[0].Is_Type = Type_Integer;

5 aComp[1].Is_Type = Type_Text;

6 int aIndex;

7 for (aIndex = 0; aIndex < 2; ++aIndex)

8 {

9 char * aType_Ptr = aComp[aIndex].Is_Type();

10 printf ("Type = %s\n", aType_Ptr);

11 }

12 }

Costruzione di oggetti

Quale funzione richiamiamo con questa dichiarazione?

Page 148: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 home/mntmgs/clang>./a.out

2 Type = Integer

3 Type = Text

4 home/mntmgs/clang>

Costruzione di oggetti

Al primo ciclo chiediamo al primo oggetto: “Tu di che tipo sei?”.

Il primo oggetto risponde: “Io sono di tipo Integer”.

Page 149: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

1 home/mntmgs/clang>./a.out

2 Type = Integer

3 Type = Text

4 home/mntmgs/clang>

Costruzione di oggetti

Al secondo ciclo chiediamo al secondo oggetto: “Tu di che tipo sei?”.

Il secondo oggetto risponde: “Io sono di tipo Text”.

Page 150: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

Costruzione di oggetti

L’uso di aggregati di puntatori a funzioni con questo stile ci porta nella direzione del linguaggio C++.

Is_Type

Integer

Is_Type

Is_Container

Elementary_Data_Item

Displayable_Format

Clonate

Displayable_Format

250

Is_Type

Real

Displayable_Format

1.25

Is_Type

Text

Displayable_Format

Ferruccio

Page 151: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

Costruzione di oggetti

Questo stesso esempio di aggregato è discusso usando il linguaggio C++ nel corso “Uso dei contenitori”.

Is_Type

Integer

Is_Type

Is_Container

Elementary_Data_Item

Displayable_Format

Clonate

Displayable_Format

250

Is_Type

Real

Displayable_Format

1.25

Is_Type

Text

Displayable_Format

Ferruccio

Page 152: Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved

Introduzione al linguaggio C

Uso delle funzioni

Copyright © 1997 by Mario G. Montobbio

All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form or by any means, electronic, mechanical, photocopying, recording, or otherwise, without the prior written permission of the author.

Mario G. Montobbio

mailto:[email protected]

Permission to use, copy and distribute this publication for the purposes of research or private study without fee is hereby granted, provided that this copyright notice and this permission notice appear in all copies.