Variabili

Una variabile, all’interno di un programma, rappresenta una porzione di memoria (RAM - Random Access Memory), ovvero la memoria volatile del sistema in cui vengono temporaneamente archiviati i dati necessari all’esecuzione del programma stesso. Questa memoria è accessibile direttamente dalla CPU, permettendo operazioni veloci su dati e istruzioni. Quando si dichiara una variabile, il compilatore riserva un blocco specifico di questa memoria, assegnandogli un nome e una dimensione fissa, determinata dal tipo di dato.

Regole per la denominazione delle variabili:

Per quanto riguarda la scelta del nome di una variabile, esistono precise regole sintattiche da rispettare:

  1. Caratteri ammessi: I nomi delle variabili possono essere costituiti da lettere dell’alfabeto (sia maiuscole che minuscole), numeri e il carattere di sottolineatura (_). Tuttavia, i numeri non possono essere utilizzati come primo carattere.
  2. Primo carattere: Il nome di una variabile deve iniziare con una lettera o un carattere di sottolineatura (_). Non è consentito iniziare con un numero o con simboli speciali.
  3. Case-sensitive: I nomi delle variabili sono sensibili al maiuscolo/minuscolo. Ciò significa che nomi come variabile e Variabile sono distinti e si riferiscono a entità diverse.
  4. Parole riservate: Non è possibile utilizzare come nome di variabile parole riservate dal linguaggio, come quelle che appartengono alla sintassi del compilatore, quali, ad esempio, quelle che definiscono tipi di dati, operatori o strutture di controllo.
  5. Lunghezza del nome: Sebbene non ci sia un limite stretto sulla lunghezza del nome di una variabile, è pratica comune utilizzare nomi chiari e significativi, evitando eccessive lunghezze, per mantenere il codice leggibile e gestibile.

Dimensione e tipo di dato:

Ogni variabile è associata a un tipo di dato che determina:

  • Il tipo di valori che la variabile può contenere (numeri interi, caratteri, numeri a virgola mobile, ecc.);
  • La quantità di memoria occupata, che è fissa e dipende dal tipo di dato. Ad esempio, una variabile che rappresenta un numero intero potrebbe occupare 4 byte di memoria, mentre una che rappresenta un carattere ne occupa 1.

L’assegnazione della memoria e la gestione dei tipi di dato vengono gestite dal compilatore in modo efficiente, garantendo che ciascuna variabile abbia lo spazio necessario per contenere i dati che le possono essere assegnati, senza eccedere o sottoutilizzare la memoria disponibile.

Operazioni Sulle Variabili in C++

Dichiarazione delle Variabili

La dichiarazione di una variabile consiste nel riservare spazio in memoria per una specifica quantità di dati e nel definire il tipo di dati che verranno memorizzati. La dichiarazione stabilisce il nome della variabile e il tipo che contiene. In C++ si può dichiarare una variabile come segue:

int numero;

In questo caso, abbiamo dichiarato una variabile di tipo int chiamata numero. È importante sapere che, al momento della dichiarazione, la variabile non è inizializzata automaticamente. Questo significa che essa conterrà un valore casuale, spesso indicato come “garbage value”. Questo valore è ciò che è presente nella locazione di memoria in cui la variabile è stata allocata al momento della dichiarazione.

Per evitare comportamenti imprevedibili, è sempre una buona pratica inizializzare le variabili, come nell’esempio seguente:

int numero = 0;

In questo modo, la variabile numero viene dichiarata e inizializzata a zero, eliminando l’incertezza di valori casuali.

Assegnamento

L’assegnamento di una variabile implica il dare un valore a una variabile già dichiarata. Si utilizza l’operatore di assegnamento = per mettere un nuovo valore nella variabile.

Ad esempio:

numero = 5;

In questo caso, assegniamo il valore 5 alla variabile numero. È importante distinguere tra dichiarazione e assegnamento: mentre la dichiarazione riserva lo spazio in memoria, l’assegnamento scrive effettivamente un valore in quella memoria.

Lettura

La lettura di una variabile consiste nell’accesso al valore attualmente contenuto nella variabile stessa. Questo viene fatto in modo implicito ogni volta che si utilizza il nome della variabile in un’espressione. Ad esempio:

int risultato = numero + 10;

In questo esempio, il valore della variabile numero viene letto e utilizzato per calcolare risultato, che conterrà numero + 10.

Gestione della Memoria: Allocazione delle Variabili

In C++, le variabili locali sono tipicamente allocate in una parte della memoria dedicata al programma chiamata “stack”. Questa memoria viene automaticamente riservata e rilasciata dal sistema quando si entra e si esce dal contesto in cui la variabile è dichiarata (come una funzione o un blocco di codice).

L’allocazione di memoria in questo modo è molto efficiente, ma implica che la dimensione della variabile e la sua durata siano fisse. Le variabili dichiarate all’interno di una funzione esistono solo mentre la funzione è in esecuzione, e vengono distrutte quando la funzione termina. Ad esempio:

int x = 7; // la variabile 'x' viene allocata sullo stack

if( x>5 ){
    int a = 10;  // la variabile 'a' viene allocata sullo stack
    // 'a' esiste solo all'interno di questo blocco di codice
}

// qui la variabile 'a' non esiste più ma 
// la variabile 'x' continua ad esistere

Alla fine della funzione, la memoria allocata per a viene automaticamente rilasciata. Questo tipo di gestione della memoria rende l’uso dello stack particolarmente veloce e utile per variabili temporanee.

Inizializzazione delle Variabili: Importanza e Pericoli

Un aspetto fondamentale da considerare è che le variabili non inizializzate possono contenere qualsiasi valore. Questo è un comportamento potenzialmente pericoloso perché utilizzare una variabile non inizializzata in un calcolo potrebbe portare a risultati imprevedibili, difficili da tracciare e correggere. Ad esempio:

int b;  // variabile non inizializzata
cout << b << endl;  // il valore di 'b' è indeterminato, potrebbe essere qualunque cosa

È una buona pratica, soprattutto per evitare errori imprevedibili e bug difficili da trovare, inizializzare sempre le variabili al momento della loro dichiarazione. L’inizializzazione fornisce un punto di riferimento chiaro e sicuro da cui partire.