Attenzione: questa pagina è stata ;;aggiornata;; , vedere [[appunti3s:tipi_di_dato_strutturato_array]] ====== Array ====== Il tipo array è un'eredità del linguaggio C. Mentre un tipo come //int// è detto //tipo semplice//, in quanto può contenere un solo valore. Un tipo //array// invece è detto "tipo strutturato", perché composto da più elementi. In italiano vengono chiamati anche vettori, ma non per questo devono essere confusi con il tipo //%%std::vector%%//. * Un array è una struttura che raggruppa tanti elementi, tutti di uno stesso tipo. * Per indicare la posizione di un elemento dell'array si può usare un indice int o char. * Se un vettore è di 9 elementi, l'indice va da 0 a 8 // questo programma è stato scritto da Fabio // crea un array, lo inizializza e lo visualizza #include int main() { int vettore[9]={7,7,7,7,7,7,5,3,1}; for (int indice=0; indice<9; indice++) std::cout << vettore[indice] << ' ' ; //notare la sintassi delle parentesi quadrate std::cout << std::endl; return 0; } I vettori sono utili quando devo gestire grandi quantità di dati dello stesso tipo. Si può accedere, leggere e modificare un singolo elemento del vettore usando l'indice, usando le parentesi quadrate. Grazie alla presenza dell'indice le operazioni sui vettori possono essere automatizzate, ad esempio, percorrendo l'array usando un'istruzione di iterazione come //for//. // questo programma è stato scritto da Fabio // crea un array, lo inizializza e ne visualizza la somma di tutti gli elementi #include int main() { int totale=0; int vettore[9]={7,7,7,7,7,7,5,3,1}; for (int indice=0; indice<9; indice++) // l'indice si può dichiarare dentro il for (solo quando serve) totale = totale + vettore[indice] ; //notare la sintassi delle parentesi quadrate std::cout << totale << std::endl; return 0; } Rivedere il precedente esempio, immaginando di dover visualizzare e sommare 90 valori interi invece di 9. Come potrebbe essere risolto un problema del genere senza l'uso dei vettori? * Il numero degli elementi deve essere stabilito al momento della compilazione. * solo per le variabili globali si può stabilire anche run time. * Il linguaggio **non** effettua controlli sul superamento dei limiti di un array Le variabili strutturate di tipo //array// derivano dal linguaggio C e sono scomode da usare perché, ad esempio, non c'è nessun controllo del superamento della posizione dell'ultimo elemento. Quindi, nel C++, al loro posto, in generale, è consigliabile usare degli //oggetti// chiamati //%%std::%%[[appunti3s:vector]]// ===== Array e puntatori a....===== Si vedrà presto il legame tra questi due argomenti (vedi [[appunti3s:gestione_della_memoria#puntatori_a_qualcosa]] all'interno dell'argomento principale [[appunti3s:gestione della memoria]] ) =====Array come stringhe di parole===== Come è ben noto, in C++ per memorizzare una parola si usa il tipo //%%std::string%%//. In C gli array erano utilizzati anche per contenere una sequenza di caratteri, ma la sequenza deve terminare con il valore //\0// (Zero, da non confondere con il valore numerico intero Zero o con il carattere ASCII '0'). Esiste una funzione che converte le variabili C++ %%std::string%% in array in stile C. std::string variabileString = "ciao"; char a1[50] = c_str(variabileString); Esempio in cui viene usata proprio questa funzione: [[appunti3s:stream#file]]