Array●   Se vogliamo risolvere il seguente problema:         leggere n numeri e stamparli ordinati    ci accorgiamo che è ...
Array●   Larray è una struttura dati:    –   statica (dimensioni costanti)    –   omogenea (formata da elementi dello stes...
Dichiarazione di un array                       N elementi di tipo T                                              ....a   ...
Es. azzeramento di un array                                        Parametrizzare sempre la                               ...
Allocazione dellarray in memoria●   Nel linguagio C gli array sono allocati in    locazioni successive della memoria.●   L...
Array e puntatori●   Lidentificatore di un array viene trattato come    una costante di tipo puntatore, ovvero ha il    si...
Array e puntatori●   E possibile accedere ad un array con una    doppia notazione:      Notazione ad indice       Notazion...
Array e puntatori●   E possibile accedere ad un array utilizzando un    puntatore:     int a[10], *pa;     pa=a;     *pa=4...
Array e puntatori●   E possibile accedere ad un array utilizzando un    puntatore:                          pa     int a[1...
Array e puntatori●   E possibile accedere ad un array utilizzando un    puntatore:                          pa     int a[1...
Array e puntatori●   E possibile accedere ad un array utilizzando un    puntatore:                          pa     int a[1...
Array e puntatori●   E possibile accedere ad un array utilizzando un    puntatore:                          pa     int a[1...
Array e puntatori●   E possibile accedere ad un array utilizzando un    puntatore:                          pa     int a[1...
Array e puntatori●   E possibile accedere ad un array utilizzando un    puntatore:                          pa     int a[1...
Array e puntatori●   E possibile accedere ad un array utilizzando un    puntatore:                          pa     int a[1...
Array e puntatori●   E possibile utilizzare lidentificatore di un array    quasi come se fosse un puntatore     int a[10],...
Upcoming SlideShare
Loading in …5
×

Lezione 12 (28 marzo 2012) puntatori vettori

458 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
458
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
15
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Lezione 12 (28 marzo 2012) puntatori vettori

  1. 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 è lARRAY
  2. 2. Array● Larray è 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 dellarray dellarray
  3. 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. 4. Es. azzeramento di un array Parametrizzare sempre la dimensione#define N 100main(){ 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 allarray; ●a[i] è una variabile intera come tutte le altre.
  5. 5. Allocazione dellarray in memoria● Nel linguagio C gli array sono allocati in locazioni successive della memoria.● Laccesso alla componente i-esima avviene sommando allindirizzo iniziale dellarray il prodotto tra i e la dimensione del tipo T. – Es. lindirizzo della terza componente di un array di interi allocato a partire dallindirizzo 100 sarà 100 + 2*4 = 108 (supposto int di 4 byte)
  6. 6. Array e puntatori● Lidentificatore di un array viene trattato come una costante di tipo puntatore, ovvero ha il significato dellindirizzo della prima componente dellarray a = &a[0]● Sfruttando laritmetica dei puntatori questo significa che &a[i] = a + i a[i] = *(a + i)
  7. 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. 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. 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. 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. 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. 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. 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. 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. 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. 16. Array e puntatori● E possibile utilizzare lidentificatore 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++ ; lindirizzo di inizio di a *pa = 3; pa[7]=9;

×