Appunti di studio sugli array, scritti durante il modulo di Fondamenti di Informatica.
Immagina una fila di cassetti numerati in un ufficio postale:
- ogni cassetto ha un numero (0, 1, 2, 3…)
- ogni cassetto contiene un solo oggetto, cioè un valore
- tutti i cassetti sono dello stesso tipo: tutte lettere, oppure tutti pacchi, mai misti
In informatica un array è una struttura dati fondamentale che permette di memorizzare una collezione di elementi dello stesso tipo in una porzione contigua di memoria.
Gli elementi di un array possono essere acceduti in modo diretto tramite un indice numerico, che nella maggior parte dei linguaggi moderni parte da 0.
Gli array in C sono una sequenza contigua di elementi dello stesso tipo in memoria.
Un array in C può essere inizializzato in diversi modi.
Inizializzazione completa
// Questo array contiene 5 elementi
int numeri[5] = {1, 2, 3, 4, 5};Si dichiara prima il tipo di dato che conterrà (ad esempio int), poi si assegna un nome all'array (ad esempio numeri) e si specifica la dimensione tra parentesi quadre. Infine è possibile inizializzarlo assegnando i valori racchiusi tra parentesi graffe.
Inizializzazione parziale
// I restanti elementi diventano 0
int numeri[5] = {3, 5};Inizializzazione senza dimensione
int numeri[] = {3, 5, 88, 90};In questo caso la dimensione viene definita automaticamente in base a quanti elementi vengono inseriti tra le parentesi graffe.
Una pratica molto usata è definire una costante per decidere la dimensione dell'array.
#include <stdio.h>
// Macro per definire la grandezza dell'array
#define N 5
int main(void) {
int numeri[N] = {3, 1, 8, 15, 20};
return 0;
}#define N 5 è una macro del preprocessore, che serve a dire al compilatore: ogni volta che vedi N nel codice, sostituiscilo con 5.
Facendo così si può modificare facilmente la grandezza dell'array ed evitare errori.
Si ok… ma cos'è una macro?
Una macro è una direttiva (#define) che dice al preprocessore di sostituire un identificatore con un certo testo ogni volta che compare nel codice.
Per stampare tutto il contenuto di un array è necessario usare un ciclo for che inizializzeremo a 0.
#include <stdio.h>
// Libreria per usare il comando cls e pulire il terminale
#include <stdlib.h>
// Macro
#define NumberElements 5
int main(void) {
// Pulisce il terminale ad ogni avvio del programma
system("cls");
int numbers[NumberElements] = {5, 2, 4, 1, 3};
// Usiamo un ciclo for per iterare gli elementi dell'array partendo dall'indice 0
for (int i = 0; i < NumberElements; i++) {
// Questa funzione stampa a video tutti gli elementi dell'array
printf("%d\n", numbers[i]);
}
return 0;
}Perché il for si inizializza da 0?
Come detto nel primo capitolo, gli indici dell'array partono sempre dall'indice 0.
Per accedere a un elemento specifico bisogna indicare il suo indice esatto tra parentesi quadre.
#include <stdio.h>
#include <stdlib.h>
#define N 3
int main(void) {
system("cls");
int num[N] = {10, 5, 2};
// Stampa il primo elemento all'indice 0
printf("%d", num[0]);
return 0;
}→ printf permette di stampare a video l'elemento
→ num[0] accede all'indice 0 dell'array
#include <stdio.h>
#include <stdlib.h>
int main(void) {
system("cls");
// Scelta grandezza array
int sizeArray;
printf("Choose the size of the Array: ");
scanf("%d", &sizeArray);
// Array
int num[sizeArray];
printf("Choose the values to put in the Array index:\n\n");
// Stampo ed assegno gli elementi dell'array che scelgo
for (int i = 0; i < sizeArray; i++) {
printf("Index %d = Element: ", i);
scanf("%d", &num[i]);
}
return 0;
}