Sei sulla pagina 1di 14

Array

Ing. Giovanna Varni (giovanna.varni@infomus.dist.unige.it) Universit degli Studi di Genova

Array
Array: struttura di dati che consiste di unit di informazione omogenee (dello stesso tipo) e con lo stesso nome struttura di dati un array un tipo di dato strutturato non un tipo di dato semplice (int, double) Un array una entit statica, ovvero mantiene le proprie dimensioni durante lesecuzione del programma. Ovviamente un array creato e distrutto ogni volta che si entra e si esce da blocchi in cui verr definito.

Array
Pi operativamente: Un array un gruppo di posizioni (locazioni) contigue di memoria correlate dal fatto che tutte hanno lo stesso nome e tipo di dato. Per far riferimento a una particolare posizione o elemento allinterno dellarray, si specifica il nome dello stesso array e il numero di posizione di quel particolare elemento dellarray.

Esempio
Sia a un array di interi (int) di 8 elementi il numero di posizione tra le [ ] si chiama indice lindice deve essere un intero o una espressione intera che verr valutata per determinare l'indice il primo elemento di un array ha indice 0 le [ ] sono un operatore con livello di priorit pari a ( )

Esempio
a [0] = 30 a [1] = 4 a [7] = -37 Poniamo b = 1 e c = 3, allora a [b+c] += 2; aggiunge 2 al quinto elemento dellarray a

Dichiarare un array
Gli array occupano spazio in memoriaQuanta? Il programmatore deve specificare il tipo di ogni elemento e il numero di elementi dell array cosicch il compilatore possa riservare lappropriata quantit di memoria.

Sintassi:
tipo_dato nome [espressione_costante] ;

Esempi

int a [20]; double b [25]; const int MAX=512; Int buffer [MAX*8];

// array di 20 interi // array di 25 double // array di 512*8 int // singola dichiarazione di due array di interi

int primo[100], secondo[23];

Inizializzare un array
Sintassi:
tipo_dato tipo_dato nome [espressione_costante] = {lista_valori}; nome [ ] = {lista_valori};

Esempi
int n [5] = {32, 27, 8, 123, 78}; int buffer [ ] = {1,2,3}; int b [5]={1,2,3}; int b [5]={32,27,64,18,95,14}; // array di 3 interi // nizializzato con 1,2,3,0,0 // ERRORE!

Operazioni sugli array


Sugli array non sono definite n operazioni aritmetiche, n operazioni di confronto, n lassegnamento. Ovvero, non possibile operare direttamente su tutto l'array, ma solo sul singolo elemento Lunica operazione definita la selezione con indice (subscripting), ottenuta nella forma: nome [espressione_costante]

Scrittura/Lettura array
Non possibile stampare con una sola istruzione lintero contenuto di un array Non possibile ricevere in input con una sola istruzione lintero contenuto di un array Utilizzo di cicli: consigliabile il ciclo for

Problemi con gli array


Aspetto critico: dimensionamento
Il numero di elementi dellarray deve essere noto in fase di sviluppo Ma a volte questo numero non noto (es. rubrica)! Se sotto-dimensiono non ho abbastanza spazio in memoria Se sovra-dimensiono spreco spazio in memoria Riempimento parziale dellarray: Uso di carattere convenzionale Uso di un contatore che memorizza numero elementi

Array come parametri di funzioni


Gli array possono essere parametri di funzioni MA: non viene passato alla funzione l'intero array

viene passato per valore alla funzione l'indirizzo iniziale della zona di memoria dove memorizzato array tale indirizzo indicato dal nome dell'array gli elementi originali dell'array potranno essere modificati

Array come parametri di funzioni


Esempio di prototipo:
int funzione (double[ ], int);

Esempio di chiamata:
int numero; double a [10]; funzione (a,numero);

Esempio di definizione
int funzione (double b[],int num)

Array come parametri di funzioni


...se volessi impedire a una funzione di modificare gli elementi di un vettore?
...uso del qualificatore di tipo const: Quando un parametro di tipo arrray sar preceduto da const, i suoi elementi diventeranno delle costanti nel corpo della funzione e ogni tentativo di modificarli, in quel contesto, provocher un errore in fase di compilazione

Array come parametri di funzioni


#include<stdio.h> void Prova_Modificare_Array(const int b[ ]); } void Prova_Modificare_Array(const int []) { b[0]/=2; b[1]/=2; b[2]/=2; return;} int main() { int a[ ]={10,20,30}; Prova_Modificare_Array(a); printf(%d%d%d\n, a[0],a[1],a[2]); return 0;