Skip to content

Latest commit

 

History

History
176 lines (111 loc) · 4.13 KB

array.md

File metadata and controls

176 lines (111 loc) · 4.13 KB

Array in C

Appunti di studio sugli array, scritti durante il modulo di Fondamenti di Informatica.


Cos'è un array?

Definizione semplice

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

Definizione tecnica

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.


Array in C

Gli array in C sono una sequenza contigua di elementi dello stesso tipo in memoria.

Come si inizializza un array?

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.

! NOTA BENE !

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.


Come si stampano a video gli elementi di un array?

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.


Come accedo a un elemento specifico del mio array?

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


Esercizi

Scelta di dimensione e valori dell'array dall'utente

#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;
}