Questo sito utilizza cookie per raccogliere dati statistici.
Privacy Policy
# 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:
```c
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:
```c
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:
```c
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:
```c
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:
```c
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:
```c
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.