La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

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

Presentazioni simili


Presentazione sul tema: "Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved."— Transcript della presentazione:

1 Introduzione al linguaggio C Uso delle funzioni

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

3 Introduzione al linguaggio C Funzione di partenza

4 Introduzione al linguaggio C Funzione di partenza Costruiamo una semplice applicazione C che stampa due valori... main Valore1 = 5 Valore2 = 10 Stampa valori originali Transito = Valore 1 Valore 1 = Valore 2 Valore 2 = Transito Stampa valori scambiati end

5 Introduzione al linguaggio C Funzione di partenza... poi scambia i valori fra di loro... main Valore1 = 5 Valore2 = 10 Stampa valori originali Transito = Valore 1 Valore 1 = Valore 2 Valore 2 = Transito Stampa valori scambiati end

6 Introduzione al linguaggio C Funzione di partenza main Valore1 = 5 Valore2 = 10 Stampa valori originali Transito = Valore 1 Valore 1 = Valore 2 Valore 2 = Transito Stampa valori scambiati end... poi li ri-stampa dopo lo scambio.

7 Introduzione al linguaggio C Funzione di partenza Costruiamo due versioni di questa applicazione: la prima versione è composta da ununica funzione main... main Valore1 = 5 Valore2 = 10 Stampa valori originali Transito = Valore 1 Valore 1 = Valore 2 Valore 2 = Transito Stampa valori scambiati end

8 Introduzione al linguaggio C Funzione di partenza main Valore1 = 5 Valore2 = 10 Stampa valori originali Transito = Valore 1 Valore 1 = Valore 2 Valore 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.

9 Introduzione al linguaggio C Funzione di partenza main Valore1 = 5 Valore2 = 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.

10 Introduzione al linguaggio C 1 #include 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 è lapplicazione C in ununica funzione main.

11 Introduzione al linguaggio C 1 #include 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 unarea intera denominata aValore1 e la inizializziamo al valore 5.

12 Introduzione al linguaggio C 1 #include 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 unarea intera denominata aValore2 e la inizializziamo al valore 10.

13 Introduzione al linguaggio C 1 #include 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 unarea intera denominata aTransito che useremo come area di transito per lo scambio dei valori.

14 Introduzione al linguaggio C 1 #include 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.

15 Introduzione al linguaggio C 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 sullarea denominata aTransito. aTransito theParm1 theParm

16 Introduzione al linguaggio C 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.

17 Introduzione al linguaggio C Compilazione

18 Introduzione al linguaggio C 1 home/mntmgs/clang>cc prova6.c 2 home/mntmgs/clang> Compilazione Abbiamo introdotto il codice simbolico in prova6.c.

19 Introduzione al linguaggio C 1 home/mntmgs/clang>cc prova6.c 2 home/mntmgs/clang> Compilazione Richiamiamo il compilatore C con il comando cc.

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

21 Introduzione al linguaggio C Elaborazione

22 Introduzione al linguaggio C 1 home/mntmgs/clang>./a.out 2 Valori originali, Val1 = 5, Val2 = 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...

23 Introduzione al linguaggio C 1 home/mntmgs/clang>./a.out 2 Valori originali, Val1 = 5, Val2 = Valori scambiati, Val1 = 10, Val2 = 5. 4 home/mntmgs/clang> Elaborazione... che si trova nella directory corrente.

24 Introduzione al linguaggio C 1 home/mntmgs/clang>./a.out 2 Valori originali, Val1 = 5, Val2 = 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.

25 Introduzione al linguaggio C Isolamento dello scambio in una funzione

26 Introduzione al linguaggio C 1 #include 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.

27 Introduzione al linguaggio C 1 #include 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.

28 Introduzione al linguaggio C 1 #include 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 Largomento theParm1 è di tipo int...

29 Introduzione al linguaggio C 1 #include 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 largomento theParm2 è di tipo int.

30 Introduzione al linguaggio C 1 #include 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 lha richiamata.

31 Introduzione al linguaggio C 1 #include 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 { }

32 Introduzione al linguaggio C 1 #include 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 unarea intera denominata aTransito che useremo come area di transito per lo scambio dei valori..

33 Introduzione al linguaggio C 1 #include 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 sullarea denominata aTransito. aTransito theParm1 theParm

34 Introduzione al linguaggio C 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.

35 Introduzione al linguaggio C 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 unarea intera denominata aValore1 e la inizializziamo al valore 5.

36 Introduzione al linguaggio C 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 unarea intera denominata aValore2 e la inizializziamo al valore 10.

37 Introduzione al linguaggio C 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.

38 Introduzione al linguaggio C 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...

39 Introduzione al linguaggio C 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,

40 Introduzione al linguaggio C 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...

41 Introduzione al linguaggio C 1 #include 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...

42 Introduzione al linguaggio C 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...

43 Introduzione al linguaggio C 1 #include 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.

44 Introduzione al linguaggio C 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.

45 Introduzione al linguaggio C Compilazione

46 Introduzione al linguaggio C 1 home/mntmgs/clang>cc prova7.c 2 home/mntmgs/clang> Compilazione Abbiamo introdotto il codice simbolico in prova7.c.

47 Introduzione al linguaggio C 1 home/mntmgs/clang>cc prova7.c 2 home/mntmgs/clang> Compilazione Richiamiamo il compilatore C con il comando cc.

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

49 Introduzione al linguaggio C Elaborazione

50 Introduzione al linguaggio C 1 home/mntmgs/clang>./a.out 2 Valori originali, Val1 = 5, Val2 = Valori scambiati, Val1 = 5, Val2 = home/mntmgs/clang> Elaborazione Poiché non abbiamo specificato un nome scelto da noi, il compilatore ha creato un modulo caricabile-eseguibile chiamato a.out...

51 Introduzione al linguaggio C 1 home/mntmgs/clang>./a.out 2 Valori originali, Val1 = 5, Val2 = Valori scambiati, Val1 = 5, Val2 = home/mntmgs/clang> Elaborazione... che si trova nella directory corrente.

52 Introduzione al linguaggio C 1 home/mntmgs/clang>./a.out 2 Valori originali, Val1 = 5, Val2 = Valori scambiati, Val1 = 5, Val2 = home/mntmgs/clang> Elaborazione Richiamando il modulo caricabile-eseguibile a.out ora vengono emessi i valori prima e dopo lo scambio.

53 Introduzione al linguaggio C 1 home/mntmgs/clang>./a.out 2 Valori originali, Val1 = 5, Val2 = Valori scambiati, Val1 = 5, Val2 = home/mntmgs/clang> Elaborazione I valori prima e dopo lo scambio sono uguali.

54 Introduzione al linguaggio C Elaborazione 510 ?

55 Introduzione al linguaggio C Passaggio di argomenti per valore Passaggio argomenti per valore

56 Introduzione al linguaggio C 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...

57 Introduzione al linguaggio C Scambio (aValore1, aValore2); 17 printf 28 (Valori scambiati, Val1 = %d, Val2 = %d.\n 29,aValore1, aValore2); 30 } void Scambio (int theParm1, int theParm2) 3 { 4 int aTransito; Passaggio di argomenti per valore... valorizza theParm1 con il contenuto di aValore1... theParm1aValore1 5

58 Introduzione al linguaggio C Scambio (aValore1, aValore2); 17 printf 28 (Valori scambiati, Val1 = %d, Val2 = %d.\n 29,aValore1, aValore2); 30 } void Scambio (int theParm1, int theParm2) 3 { 4 int aTransito; Passaggio di argomenti per valore... e valorizza theParm2 con il contenuto di aValore2... theParm2aValore2 10

59 Introduzione al linguaggio C 1 #include 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 theParm aValore2 aValore15 10

60 Introduzione al linguaggio C 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 theParm

61 Introduzione al linguaggio C 1 #include 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... theParm2aValore2 10 theParm1aValore1 5

62 Introduzione al linguaggio C 1 #include 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 aValore210 theParm1 aValore15

63 Introduzione al linguaggio C Nota per i programmatori COBOL

64 Introduzione al linguaggio C 1 IDENTIFICATION DIVISION. 2 PROGRAM-ID. SCAMBIO WORKING-STORAGE SECTION A-TRANSITO PIC S9(9) COMP. 5 LINKAGE SECTION THE-PARM1 PIC S9(9) COMP 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-PARM Nota per i programmatori COBOL In COBOL gli argomenti formali sono maschere per accedere... theParm2 theParm1

65 Introduzione al linguaggio C 1 IDENTIFICATION DIVISION. 2 PROGRAM-ID. MAIN WORKING-STORAGE SECTION A-VALORE1 PIC S9(9) COMP VALUE A-VALORE2 PIC S9(9) COMP VALUE PROCEDURE DIVISION. 7 CALL SCAMBIO 8 USING A-VALORE1, 9 A-VALORE Nota per i programmatori COBOL... con altri nomi alle aree di partenza A-VALORE1 ed A-VALORE2. theParm2 theParm

66 Introduzione al linguaggio C Passaggio di argomenti per indirizzo Passaggio argomenti per indirizzo

67 Introduzione al linguaggio C 1 #include 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.

68 Introduzione al linguaggio C 1 #include 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.

69 Introduzione al linguaggio C 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.

70 Introduzione al linguaggio C Scambio (&aValore1, &aValore2); 17 printf 28 (Valori scambiati, Val1 = %d, Val2 = %d.\n 29,aValore1, aValore2); 30 } Passaggio di argomenti per indirizzo Loperatore & calcola lindirizzo dellarea aValore1.

71 Introduzione al linguaggio C 1 #include 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.

72 Introduzione al linguaggio C Scambio (&aValore1, &aValore2); 17 printf 28 (Valori scambiati, Val1 = %d, Val2 = %d.\n 29,aValore1, aValore2); 30 } Passaggio di argomenti per indirizzo Loperatore & calcola lindirizzo dellarea aValore2.

73 Introduzione al linguaggio C 1 #include 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.

74 Introduzione al linguaggio C 1 #include 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 loperatore di de-referenziamento *

75 Introduzione al linguaggio C 1 #include 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 allarea aTransito. aValore2 aValore1 aTransito *theParm1 *theParm

76 Introduzione al linguaggio C 1 #include 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 loperatore di de-referenziamento *

77 Introduzione al linguaggio C 1 #include 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 loperatore di de-referenziamento *

78 Introduzione al linguaggio C 1 #include 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 allarea aValore1. aValore2 aValore1 aTransito *theParm1 *theParm

79 Introduzione al linguaggio C 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 lelaborazione di questa dichiarazione il valore dellarea aValore1 è cambiato da 5 a 10. aValore2 aValore1 aTransito theParm1 theParm

80 Introduzione al linguaggio C 1 #include 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 loperatore di de-referenziamento *

81 Introduzione al linguaggio C 1 #include 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 allarea aValore2. aValore2 aValore1 aTransito *theParm1 *theParm

82 Introduzione al linguaggio C 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 lelaborazione di questa dichiarazione il valore dellarea aValore2 è cambiato da 10 a 5. aValore2 aValore1 aTransito theParm1 theParm

83 Introduzione al linguaggio C Puntatori a funzioni

84 Introduzione al linguaggio C 1 #include 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...

85 Introduzione al linguaggio C 1 #include 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 *...

86 Introduzione al linguaggio C 1 #include 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.

87 Introduzione al linguaggio C 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...

88 Introduzione al linguaggio C 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 *...

89 Introduzione al linguaggio C void Somma (int *theParm1, int *theParm2) 10 { 11 *theParm1 += *theParm2; 12 } Puntatori a funzioni... e non restituisce alcun valore.

90 Introduzione al linguaggio C 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 loperatore di de-referenziamento *...

91 Introduzione al linguaggio C 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 loperatore di de-referenziamento *.

92 Introduzione al linguaggio C void Somma (int *theParm1, int *theParm2) 10 { 11 *theParm1 += *theParm2; 12 } Puntatori a funzioni Loperatore += incrementa il contenuto dellarea a primo membro con il contenuto dellarea a secondo membro.

93 Introduzione al linguaggio C 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.

94 Introduzione al linguaggio C 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...

95 Introduzione al linguaggio C 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.

96 Introduzione al linguaggio C 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.

97 Introduzione al linguaggio C 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 *...

98 Introduzione al linguaggio C 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.

99 Introduzione al linguaggio C 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.

100 Introduzione al linguaggio C 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.

101 Introduzione al linguaggio C 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 unindice che identifica lelemento corrente.

102 Introduzione al linguaggio C 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.

103 Introduzione al linguaggio C 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.

104 Introduzione al linguaggio C 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.

105 Introduzione al linguaggio C 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 lindice aIndex per elaborare lelemento seguente del vettore di puntatori.

106 Introduzione al linguaggio C 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.

107 Introduzione al linguaggio C 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 dallelemento corrente del vettore di puntatori a funzione.

108 Introduzione al linguaggio C 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.

109 Introduzione al linguaggio C Compilazione

110 Introduzione al linguaggio C 1 home/mntmgs/clang>cc prova8.c 2 home/mntmgs/clang> Compilazione Abbiamo introdotto il codice simbolico in prova8.c.

111 Introduzione al linguaggio C 1 home/mntmgs/clang>cc prova8.c 2 home/mntmgs/clang> Compilazione Richiamiamo il compilatore C con il comando cc.

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

113 Introduzione al linguaggio C Elaborazione

114 Introduzione al linguaggio C 1 home/mntmgs/clang>./a.out 2 Valori originali, Val1 = 5, Val2 = 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...

115 Introduzione al linguaggio C 1 home/mntmgs/clang>./a.out 2 Valori originali, Val1 = 5, Val2 = Valori modificati, Val1 = 10, Val2 = 5. 4 Valori modificati, Val1 = 15, Val2 = 5. 5 home/mntmgs/clang> Elaborazione... che si trova nella directory corrente.

116 Introduzione al linguaggio C 1 home/mntmgs/clang>./a.out 2 Valori originali, Val1 = 5, Val2 = 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.

117 Introduzione al linguaggio C 1 home/mntmgs/clang>./a.out 2 Valori originali, Val1 = 5, Val2 = 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.

118 Introduzione al linguaggio C 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 lindice aIndex vale 0 la funzione main richiama la funzione Scambio...

119 Introduzione al linguaggio C 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.

120 Introduzione al linguaggio C 1 home/mntmgs/clang>./a.out 2 Valori originali, Val1 = 5, Val2 = 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 dellarea aValore2.

121 Introduzione al linguaggio C 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 lindice aIndex vale 1 la funzione main richiama la funzione Somma...

122 Introduzione al linguaggio C 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.

123 Introduzione al linguaggio C Elaborazione A cosa serve un vettore di puntatori a funzione?

124 Introduzione al linguaggio C Costruzione di oggetti

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

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

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

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

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

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

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

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

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

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

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

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

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

138 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 unarea di formato non specificato.

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

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

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

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

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

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

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

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

147 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?

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

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

150 Introduzione al linguaggio C Costruzione di oggetti Luso 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

151 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

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


Scaricare ppt "Introduzione al linguaggio C Uso delle funzioni. Introduzione al linguaggio C Uso delle funzioni Copyright © 1997 by Mario G. Montobbio All rights reserved."

Presentazioni simili


Annunci Google