Salta ai contenuti
Manuale LogoManuale Logo

Array

Per memorizzare i voti di 30 studenti, trenta variabili separate come voto1 e voto2 renderebbero il codice difficile da gestire.

Un array contiene una sequenza di valori dello stesso tipo sotto un unico nome. Ogni elemento si raggiunge tramite il suo indice.

tipo nome[dimensione];
int numeri[5]; // una fila di 5 numeri interi
double voti[10]; // una fila di 10 numeri decimali
char lettere[26]; // una fila di 26 caratteri

La dimensione deve essere un numero fisso, noto in anticipo (prima dell’esecuzione del programma).

Puoi assegnare i valori subito alla dichiarazione, tra parentesi graffe:

int numeri[5] = {10, 20, 30, 40, 50};
double voti[4] = {8.5, 7.0, 9.0, 6.5};
char vocali[5] = {'a', 'e', 'i', 'o', 'u'};

Se non scrivi la dimensione, viene calcolata automaticamente dai valori:

int numeri[] = {10, 20, 30, 40, 50}; // dimensione 5, calcolata automaticamente

Per inizializzare tutti gli elementi a zero:

int numeri[5] = {0}; // tutti e 5 a zero
int numeri2[5] = {}; // anche questo funziona in C++11

Se fornisci meno valori della dimensione, il resto viene azzerato:

int numeri[5] = {1, 2}; // diventa {1, 2, 0, 0, 0}

Ogni elemento ha un numero d’ordine chiamato indice. Attenzione: gli indici partono da 0, non da 1.

int numeri[] = {10, 20, 30, 40, 50};
//indice: 0 1 2 3 4
cout << numeri[0] << endl; // 10: primo elemento
cout << numeri[1] << endl; // 20
cout << numeri[4] << endl; // 50: ultimo elemento

Per un array di dimensione n, gli indici vanno da 0 a n-1.

int numeri[] = {10, 20, 30};
numeri[1] = 99; // cambiamo il secondo elemento
cout << numeri[1] << endl; // 99

In C++ non c’è alcun controllo automatico sui limiti. Se accedi a un indice che non esiste, il comportamento è imprevedibile e può corrompere la memoria del programma:

int numeri[5] = {1, 2, 3, 4, 5};
cout << numeri[10] << endl; // PERICOLO: indice fuori limiti
numeri[10] = 99; // PERICOLO: potrebbe causare crash o dati corrotti

Gli indici devono essere compresi tra 0 e dimensione - 1.

Il modo più comune per lavorare con tutti gli elementi di un array:

int numeri[] = {10, 20, 30, 40, 50};
int n = 5;
for (int i = 0; i < n; i++) {
cout << numeri[i] << " ";
}
// Output: 10 20 30 40 50

Puoi ricavare il numero di elementi con sizeof:

int numeri[] = {10, 20, 30, 40, 50};
// sizeof(numeri) = dimensione totale in byte dell'array
// sizeof(numeri[0]) = dimensione in byte di un singolo elemento
int dimensione = sizeof(numeri) / sizeof(numeri[0]);
cout << dimensione << endl; // 5

In C++ moderno puoi scorrere tutti gli elementi in modo più semplice:

int numeri[] = {10, 20, 30, 40, 50};
for (int n : numeri) {
cout << n << " ";
}
// Output: 10 20 30 40 50

Si legge: “per ogni n nell’array numeri”.

int numeri[] = {3, 7, 1, 9, 4};
int n = 5;
int massimo = numeri[0]; // partiamo dal primo elemento
for (int i = 1; i < n; i++) {
if (numeri[i] > massimo) {
massimo = numeri[i]; // aggiorniamo il massimo se troviamo un valore più grande
}
}
cout << "Massimo: " << massimo << endl; // 9
int numeri[] = {5, 10, 15, 20, 25};
int n = 5;
int somma = 0;
for (int i = 0; i < n; i++) {
somma += numeri[i];
}
double media = (double)somma / n;
cout << "Somma: " << somma << endl; // 75
cout << "Media: " << media << endl; // 15
#include <iostream>
using namespace std;
int main() {
const int N = 5;
int voti[N];
// Raccogliamo i voti dall'utente
cout << "Inserisci " << N << " voti:" << endl;
for (int i = 0; i < N; i++) {
cout << "Voto " << (i + 1) << ": ";
cin >> voti[i];
}
// Calcoliamo somma, massimo e minimo
int somma = 0;
int max = voti[0];
int min = voti[0];
for (int i = 0; i < N; i++) {
somma += voti[i];
if (voti[i] > max) max = voti[i];
if (voti[i] < min) min = voti[i];
}
double media = (double)somma / N;
cout << endl;
cout << "Media: " << media << endl;
cout << "Voto più alto: " << max << endl;
cout << "Voto più basso: " << min << endl;
return 0;
}