SlideShare a Scribd company logo
1 of 16
Download to read offline
Array
●   Se vogliamo risolvere il seguente problema:
         leggere n numeri e stamparli ordinati
    ci accorgiamo che è necessario avere tutti i
    numeri a disposizione per poter effettuare
    confronti e scambi fra di loro.
●   E' necessario avere una struttura dati che li
    possa contenere
●   Tale struttura è l'ARRAY
Array
●   L'array è una struttura dati:
    –   statica (dimensioni costanti)
    –   omogenea (formata da elementi dello stesso tipo)
    –   ad accesso diretto (tempo di accesso costante)
                         N elementi di tipo T



                                                ....
    a
              0      1   2         3                   N-1

                                                             Posizione (indice)
         Nome                Componenti (anonime)            della componente
        dell'array                dell'array
Dichiarazione di un array
                       N elementi di tipo T



                                              ....
a
        0      1       2       3                     N-1



                   T        a[N];
    Esempio:
                                                     a è un array di N
    int a[10];                                       elementi di tipo T
    char s[80]:
    double f[100];
Es. azzeramento di un array
                                        Parametrizzare sempre la
                                              dimensione
#define N 100

main(){
  int i;
  int a[N];

    for (i = 0; i < N; i++)
      a[i]=0;

    ...                 Accesso alla componente i-esima;
}
                    ●[ ] sono considerate un operatore di accesso
                    all'array;
                    ●a[i] è una variabile intera come tutte le altre.
Allocazione dell'array in memoria
●   Nel linguagio C gli array sono allocati in
    locazioni successive della memoria.
●   L'accesso alla componente i-esima avviene
    sommando all'indirizzo iniziale dell'array il
    prodotto tra i e la dimensione del tipo T.
    –   Es. l'indirizzo della terza componente di un array di
        interi allocato a partire dall'indirizzo 100 sarà
        100 + 2*4 = 108 (supposto int di 4 byte)
Array e puntatori
●   L'identificatore di un array viene trattato come
    una costante di tipo puntatore, ovvero ha il
    significato dell'indirizzo della prima componente
    dell'array
                       a = &a[0]
●   Sfruttando l'aritmetica dei puntatori questo
    significa che
              &a[i] =   a + i
               a[i] = *(a + i)
Array e puntatori
●   E' possibile accedere ad un array con una
    doppia notazione:

      Notazione ad indice       Notazione a puntatore
                    a[i]    =   *(a+i)
                    a[4]    =   *(a+4)
                  a[i*j]    =   *(a+i*j)
                    a[0]    =   *a
Array e puntatori
●   E' possibile accedere ad un array utilizzando un
    puntatore:

     int a[10], *pa;
     pa=a;
     *pa=4;
     *(pa+3)=12;               Si può usare un puntatore con la
                              notazione ad indice come se fosse
                                           un array
     pa[6] = 8
     pa++ ;
     *pa = 3;
     pa[7]=9;
Array e puntatori
●   E' possibile accedere ad un array utilizzando un
    puntatore:

                          pa
     int a[10], *pa;
     pa=a;
     *pa=4;
     *(pa+3)=12;          a    ?   ?   ?   ?   ?   ?   ?   ?   ?   ?

                               0   1   2   3   4   5   6   7   8   9
     pa[6] = 8
     pa++ ;
     *pa = 3;
     pa[7]=9;
Array e puntatori
●   E' possibile accedere ad un array utilizzando un
    puntatore:

                          pa
     int a[10], *pa;
     pa=a;
     *pa=4;
     *(pa+3)=12;          a    4   ?   ?   ?   ?   ?   ?   ?   ?   ?

                               0   1   2   3   4   5   6   7   8   9
     pa[6] = 8
     pa++ ;
     *pa = 3;
     pa[7]=9;
Array e puntatori
●   E' possibile accedere ad un array utilizzando un
    puntatore:

                          pa
     int a[10], *pa;
     pa=a;
     *pa=4;
     *(pa+3)=12;          a    4   ?   ? 12 ?      ?   ?   ?   ?   ?

                               0   1   2   3   4   5   6   7   8   9
     pa[6] = 8
     pa++ ;
     *pa = 3;
     pa[7]=9;
Array e puntatori
●   E' possibile accedere ad un array utilizzando un
    puntatore:

                          pa
     int a[10], *pa;
     pa=a;
     *pa=4;
     *(pa+3)=12;          a    4   ?   ? 12 ?      ?   8   ?   ?   ?

                               0   1   2   3   4   5   6   7   8   9
     pa[6] = 8;
     pa++ ;
     *pa = 3;
     pa[7]=9;
Array e puntatori
●   E' possibile accedere ad un array utilizzando un
    puntatore:

                          pa
     int a[10], *pa;
     pa=a;
     *pa=4;
     *(pa+3)=12;          a    4   ?   ? 12 ?      ?   8   ?   ?   ?

                               0   1   2   3   4   5   6   7   8   9
     pa[6] = 8;
     pa++ ;
     *pa = 3;
     pa[7]=9;
Array e puntatori
●   E' possibile accedere ad un array utilizzando un
    puntatore:

                          pa
     int a[10], *pa;
     pa=a;
     *pa=4;
     *(pa+3)=12;          a    4   3   ? 12 ?      ?   8   ?   ?   ?

                               0   1   2   3   4   5   6   7   8   9
     pa[6] = 8;
     pa++ ;
     *pa = 3;
     pa[7]=9;
Array e puntatori
●   E' possibile accedere ad un array utilizzando un
    puntatore:

                          pa
     int a[10], *pa;
     pa=a;
     *pa=4;
     *(pa+3)=12;          a    4   3   ? 12 ?      ?   8   ?   9   ?

                               0   1   2   3   4   5   6   7   8   9
     pa[6] = 8;
     pa++ ;
     *pa = 3;
     pa[7]=9;
Array e puntatori
●   E' possibile utilizzare l'identificatore di un array
    quasi come se fosse un puntatore

     int a[10], *pa;        int a[10];
     pa=a;
     *pa=4;                 *a=4;            E' vietato perchè a è
     *(pa+3)=12;            *(a+3)=12;          considerata una
                                                costante di tipo
                                             puntatore: non esiste
     pa[6] = 8              a[6] = 8         una zona di memoria
                                            dedicata a mantenere
     pa++ ;                 a++ ;           l'indirizzo di inizio di a
     *pa = 3;
     pa[7]=9;

More Related Content

What's hot

Puntatori e Riferimenti
Puntatori e RiferimentiPuntatori e Riferimenti
Puntatori e RiferimentiIlio Catallo
 
Eserc v del 26 marzo 2012
 Eserc v del 26 marzo 2012 Eserc v del 26 marzo 2012
Eserc v del 26 marzo 2012STELITANO
 
Complessità e ordinamento di Ezio Sperduto
Complessità e ordinamento di Ezio SperdutoComplessità e ordinamento di Ezio Sperduto
Complessità e ordinamento di Ezio SperdutoVitalij Zadneprovskij
 
Data mining 05-numpypandas
Data mining 05-numpypandasData mining 05-numpypandas
Data mining 05-numpypandasStudiabo
 
06 1 array_stringhe_typedef
06 1 array_stringhe_typedef06 1 array_stringhe_typedef
06 1 array_stringhe_typedefPiero Fraternali
 
Lezione 12 (28 marzo 2012) funzioni memoria - puntatori
Lezione 12 (28 marzo 2012) funzioni   memoria - puntatoriLezione 12 (28 marzo 2012) funzioni   memoria - puntatori
Lezione 12 (28 marzo 2012) funzioni memoria - puntatoriSTELITANO
 
Calcolo Infinitesimale
Calcolo InfinitesimaleCalcolo Infinitesimale
Calcolo Infinitesimaleguesta43993
 

What's hot (7)

Puntatori e Riferimenti
Puntatori e RiferimentiPuntatori e Riferimenti
Puntatori e Riferimenti
 
Eserc v del 26 marzo 2012
 Eserc v del 26 marzo 2012 Eserc v del 26 marzo 2012
Eserc v del 26 marzo 2012
 
Complessità e ordinamento di Ezio Sperduto
Complessità e ordinamento di Ezio SperdutoComplessità e ordinamento di Ezio Sperduto
Complessità e ordinamento di Ezio Sperduto
 
Data mining 05-numpypandas
Data mining 05-numpypandasData mining 05-numpypandas
Data mining 05-numpypandas
 
06 1 array_stringhe_typedef
06 1 array_stringhe_typedef06 1 array_stringhe_typedef
06 1 array_stringhe_typedef
 
Lezione 12 (28 marzo 2012) funzioni memoria - puntatori
Lezione 12 (28 marzo 2012) funzioni   memoria - puntatoriLezione 12 (28 marzo 2012) funzioni   memoria - puntatori
Lezione 12 (28 marzo 2012) funzioni memoria - puntatori
 
Calcolo Infinitesimale
Calcolo InfinitesimaleCalcolo Infinitesimale
Calcolo Infinitesimale
 

Viewers also liked

Viewers also liked (9)

Kijiji auto-stellari
Kijiji auto-stellariKijiji auto-stellari
Kijiji auto-stellari
 
Coolor
Coolor Coolor
Coolor
 
Mas deporte 38
Mas deporte 38Mas deporte 38
Mas deporte 38
 
Schs
SchsSchs
Schs
 
Link regency
Link regencyLink regency
Link regency
 
Relazione TesserONE
Relazione TesserONERelazione TesserONE
Relazione TesserONE
 
Under the sea
Under the seaUnder the sea
Under the sea
 
Ubiquitous learning
Ubiquitous learningUbiquitous learning
Ubiquitous learning
 
日本のIT企業 高木さん
日本のIT企業 高木さん日本のIT企業 高木さん
日本のIT企業 高木さん
 

More from STELITANO

Soluzione esame b del 13 giugno 2012
Soluzione esame b del 13 giugno 2012Soluzione esame b del 13 giugno 2012
Soluzione esame b del 13 giugno 2012STELITANO
 
Soluzione esame a del 13 giugno 2012
Soluzione esame a del 13 giugno 2012Soluzione esame a del 13 giugno 2012
Soluzione esame a del 13 giugno 2012STELITANO
 
Soluzioni abilità informatiche 16 maggio 2012
Soluzioni abilità informatiche 16 maggio 2012Soluzioni abilità informatiche 16 maggio 2012
Soluzioni abilità informatiche 16 maggio 2012STELITANO
 
Dispenza aloisi
Dispenza aloisiDispenza aloisi
Dispenza aloisiSTELITANO
 
Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)STELITANO
 
Lezione 22 (7 maggio 2012)
Lezione 22 (7 maggio 2012)Lezione 22 (7 maggio 2012)
Lezione 22 (7 maggio 2012)STELITANO
 
Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)STELITANO
 
Lezione 20 (2 maggio 2012) seconda parte
Lezione 20 (2 maggio 2012) seconda parteLezione 20 (2 maggio 2012) seconda parte
Lezione 20 (2 maggio 2012) seconda parteSTELITANO
 
Lezione 20 (2 maggio 2012) prima parte
Lezione 20 (2 maggio 2012) prima parteLezione 20 (2 maggio 2012) prima parte
Lezione 20 (2 maggio 2012) prima parteSTELITANO
 
Lezione 19 (18 aprile 2012) ricerca
Lezione 19 (18 aprile 2012)   ricercaLezione 19 (18 aprile 2012)   ricerca
Lezione 19 (18 aprile 2012) ricercaSTELITANO
 
Lezione 18 (18 aprile 2012) ordinamenti
Lezione 18 (18 aprile 2012)   ordinamentiLezione 18 (18 aprile 2012)   ordinamenti
Lezione 18 (18 aprile 2012) ordinamentiSTELITANO
 
Lezione 15 (2 aprile 2012)
Lezione 15 (2 aprile 2012)Lezione 15 (2 aprile 2012)
Lezione 15 (2 aprile 2012)STELITANO
 
Lezione 14 (2 aprile 2012)
Lezione 14 (2 aprile 2012)Lezione 14 (2 aprile 2012)
Lezione 14 (2 aprile 2012)STELITANO
 
Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)STELITANO
 
Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)STELITANO
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)STELITANO
 
Soluzione esonero del 4 aprile 2012
Soluzione esonero del 4 aprile 2012Soluzione esonero del 4 aprile 2012
Soluzione esonero del 4 aprile 2012STELITANO
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)STELITANO
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)STELITANO
 

More from STELITANO (20)

Risultati
RisultatiRisultati
Risultati
 
Soluzione esame b del 13 giugno 2012
Soluzione esame b del 13 giugno 2012Soluzione esame b del 13 giugno 2012
Soluzione esame b del 13 giugno 2012
 
Soluzione esame a del 13 giugno 2012
Soluzione esame a del 13 giugno 2012Soluzione esame a del 13 giugno 2012
Soluzione esame a del 13 giugno 2012
 
Soluzioni abilità informatiche 16 maggio 2012
Soluzioni abilità informatiche 16 maggio 2012Soluzioni abilità informatiche 16 maggio 2012
Soluzioni abilità informatiche 16 maggio 2012
 
Dispenza aloisi
Dispenza aloisiDispenza aloisi
Dispenza aloisi
 
Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)
 
Lezione 22 (7 maggio 2012)
Lezione 22 (7 maggio 2012)Lezione 22 (7 maggio 2012)
Lezione 22 (7 maggio 2012)
 
Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)
 
Lezione 20 (2 maggio 2012) seconda parte
Lezione 20 (2 maggio 2012) seconda parteLezione 20 (2 maggio 2012) seconda parte
Lezione 20 (2 maggio 2012) seconda parte
 
Lezione 20 (2 maggio 2012) prima parte
Lezione 20 (2 maggio 2012) prima parteLezione 20 (2 maggio 2012) prima parte
Lezione 20 (2 maggio 2012) prima parte
 
Lezione 19 (18 aprile 2012) ricerca
Lezione 19 (18 aprile 2012)   ricercaLezione 19 (18 aprile 2012)   ricerca
Lezione 19 (18 aprile 2012) ricerca
 
Lezione 18 (18 aprile 2012) ordinamenti
Lezione 18 (18 aprile 2012)   ordinamentiLezione 18 (18 aprile 2012)   ordinamenti
Lezione 18 (18 aprile 2012) ordinamenti
 
Lezione 15 (2 aprile 2012)
Lezione 15 (2 aprile 2012)Lezione 15 (2 aprile 2012)
Lezione 15 (2 aprile 2012)
 
Lezione 14 (2 aprile 2012)
Lezione 14 (2 aprile 2012)Lezione 14 (2 aprile 2012)
Lezione 14 (2 aprile 2012)
 
Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)
 
Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)
 
Soluzione esonero del 4 aprile 2012
Soluzione esonero del 4 aprile 2012Soluzione esonero del 4 aprile 2012
Soluzione esonero del 4 aprile 2012
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)
 

Lezione 12 (28 marzo 2012) puntatori vettori

  • 1. Array ● Se vogliamo risolvere il seguente problema: leggere n numeri e stamparli ordinati ci accorgiamo che è necessario avere tutti i numeri a disposizione per poter effettuare confronti e scambi fra di loro. ● E' necessario avere una struttura dati che li possa contenere ● Tale struttura è l'ARRAY
  • 2. Array ● L'array è una struttura dati: – statica (dimensioni costanti) – omogenea (formata da elementi dello stesso tipo) – ad accesso diretto (tempo di accesso costante) N elementi di tipo T .... a 0 1 2 3 N-1 Posizione (indice) Nome Componenti (anonime) della componente dell'array dell'array
  • 3. Dichiarazione di un array N elementi di tipo T .... a 0 1 2 3 N-1 T a[N]; Esempio: a è un array di N int a[10]; elementi di tipo T char s[80]: double f[100];
  • 4. Es. azzeramento di un array Parametrizzare sempre la dimensione #define N 100 main(){ int i; int a[N]; for (i = 0; i < N; i++) a[i]=0; ... Accesso alla componente i-esima; } ●[ ] sono considerate un operatore di accesso all'array; ●a[i] è una variabile intera come tutte le altre.
  • 5. Allocazione dell'array in memoria ● Nel linguagio C gli array sono allocati in locazioni successive della memoria. ● L'accesso alla componente i-esima avviene sommando all'indirizzo iniziale dell'array il prodotto tra i e la dimensione del tipo T. – Es. l'indirizzo della terza componente di un array di interi allocato a partire dall'indirizzo 100 sarà 100 + 2*4 = 108 (supposto int di 4 byte)
  • 6. Array e puntatori ● L'identificatore di un array viene trattato come una costante di tipo puntatore, ovvero ha il significato dell'indirizzo della prima componente dell'array a = &a[0] ● Sfruttando l'aritmetica dei puntatori questo significa che &a[i] = a + i a[i] = *(a + i)
  • 7. Array e puntatori ● E' possibile accedere ad un array con una doppia notazione: Notazione ad indice Notazione a puntatore a[i] = *(a+i) a[4] = *(a+4) a[i*j] = *(a+i*j) a[0] = *a
  • 8. Array e puntatori ● E' possibile accedere ad un array utilizzando un puntatore: int a[10], *pa; pa=a; *pa=4; *(pa+3)=12; Si può usare un puntatore con la notazione ad indice come se fosse un array pa[6] = 8 pa++ ; *pa = 3; pa[7]=9;
  • 9. Array e puntatori ● E' possibile accedere ad un array utilizzando un puntatore: pa int a[10], *pa; pa=a; *pa=4; *(pa+3)=12; a ? ? ? ? ? ? ? ? ? ? 0 1 2 3 4 5 6 7 8 9 pa[6] = 8 pa++ ; *pa = 3; pa[7]=9;
  • 10. Array e puntatori ● E' possibile accedere ad un array utilizzando un puntatore: pa int a[10], *pa; pa=a; *pa=4; *(pa+3)=12; a 4 ? ? ? ? ? ? ? ? ? 0 1 2 3 4 5 6 7 8 9 pa[6] = 8 pa++ ; *pa = 3; pa[7]=9;
  • 11. Array e puntatori ● E' possibile accedere ad un array utilizzando un puntatore: pa int a[10], *pa; pa=a; *pa=4; *(pa+3)=12; a 4 ? ? 12 ? ? ? ? ? ? 0 1 2 3 4 5 6 7 8 9 pa[6] = 8 pa++ ; *pa = 3; pa[7]=9;
  • 12. Array e puntatori ● E' possibile accedere ad un array utilizzando un puntatore: pa int a[10], *pa; pa=a; *pa=4; *(pa+3)=12; a 4 ? ? 12 ? ? 8 ? ? ? 0 1 2 3 4 5 6 7 8 9 pa[6] = 8; pa++ ; *pa = 3; pa[7]=9;
  • 13. Array e puntatori ● E' possibile accedere ad un array utilizzando un puntatore: pa int a[10], *pa; pa=a; *pa=4; *(pa+3)=12; a 4 ? ? 12 ? ? 8 ? ? ? 0 1 2 3 4 5 6 7 8 9 pa[6] = 8; pa++ ; *pa = 3; pa[7]=9;
  • 14. Array e puntatori ● E' possibile accedere ad un array utilizzando un puntatore: pa int a[10], *pa; pa=a; *pa=4; *(pa+3)=12; a 4 3 ? 12 ? ? 8 ? ? ? 0 1 2 3 4 5 6 7 8 9 pa[6] = 8; pa++ ; *pa = 3; pa[7]=9;
  • 15. Array e puntatori ● E' possibile accedere ad un array utilizzando un puntatore: pa int a[10], *pa; pa=a; *pa=4; *(pa+3)=12; a 4 3 ? 12 ? ? 8 ? 9 ? 0 1 2 3 4 5 6 7 8 9 pa[6] = 8; pa++ ; *pa = 3; pa[7]=9;
  • 16. Array e puntatori ● E' possibile utilizzare l'identificatore di un array quasi come se fosse un puntatore int a[10], *pa; int a[10]; pa=a; *pa=4; *a=4; E' vietato perchè a è *(pa+3)=12; *(a+3)=12; considerata una costante di tipo puntatore: non esiste pa[6] = 8 a[6] = 8 una zona di memoria dedicata a mantenere pa++ ; a++ ; l'indirizzo di inizio di a *pa = 3; pa[7]=9;