Contenuti:
Premessa
Caratteristiche delle variabili
Dichiarazione di una variabile
Esempi
Conclusioni
Premessa
Una variabile è un qualcosa che serve a contenere dei valori (numeri, caratteri, stringhe, valori booleani, ecc) che può cambiare (è variabile appunto) durante l’esecuzione di un programma.
Diversa è la definzione di costante, e cioè un qualcosa che ha valore fisso dall’inizio alla fine (del programma).
Caratteristiche delle variabili
Una variabile ha 5 caratteristiche che sono:
- il nome
- deve iniziare con un carattere, può contenere o terminare con numeri, non può contenere caratteri speciali (@,#,*,+, spazio, ecc.) o segni di interpunzione (. , ; ! ecc.). Ad esempio una variabile si potrà chiamare a1, a2 ma non a@1 e neanche 3b;
- il tipo
- è l’insieme di tutti i possibili valori che può assumere una variabile; questo insieme è finito, il che vuol dire che una variabile che ad esempio viene dichiarata intera non potrà poi assumere tutti i possibili numeri interi, ma solo quelli che sono compresi nell’insieme.
In linguaggio C standard abbiamo i seguenti tipi predefiniti: int, char, float, double, ecc. in linguaggio C++ abbiamo anche: string, bool, ecc. - il valore
- cioè quello che sarà assegnato alla variabile tramite un’istruzione di inizializzazione o assegnazione, e che sarà poi memorizzato in memoria (RAM)
- l’indirizzo in RAM
- e cioè quel numero che identifica univocamente la locazione in RAM in cui la variabile è stata memorizzata a tempo di esecuzione*. In linguaggio C per sapere l’indirzzo di una varaabile si può usare la e-commerciale (&, detta anche ampersand) prima del nome della variabile e si può visualizzare ad esempio così (in C++ con l’uso di cout):
int a; cout<<"la variabile di nome a ha indirizzo: "<<&a<
L'indirizzo sarà visualizzato in formato esadecimale.
- lo spazio occupato
- ovvero il numero di byte occupati dalla variabile in RAM a tempo di esecuzione; in linguaggio C per conoscere quanti byte sono occupati da una variabile è possibile usare l'operatore sizeof. Il sizeof può essere usato in due modi e cioè passandogli il tipo oppure il nome della variabile (se è stata prima dichiarata. Quindi la sintassi generale è: sizeof(tipo) oppure sizeof(nome). Per visualizzare il numero di byte occupati da una variabile si può fare quindi così:
int a; float b; cout<<"la variabile intera di nome a occupa: "<
Dichiarazione di una variabile
Una variabile occupa spazio in RAM tramite l'istruzione di dichiarazione, e cioè, quando in C/C++ scriviamo qualcosa del tipo:
int a; float b;
stiamo dicendo al compilatore che quando il programma andrà in esecuzione bisognerà allocare (riservare) uno spazio in Ram per la variabile a in un certo indirizzo. Stiamo anche dicendo che la variabile si chiama a ed ha tipo int. Il nome mi servirà per i riferimenti futuri sia per la modifica (scrittura) della variabile come in:
a = 7; a = c +13; //ipotizzando che c sia una variabile già dichiarata e inizializzata a++; //che vuol dire: a = a + 1;
sia per la lettura come in:
c = a +23; //ipotizzando che c sia una variabile prima dichiarata if(a<12) c++;
Esempi
Lo spazio occupato sarà diverso in funzione del tipo. Per capire meglio, lanciate il seguente frammento di codice:
int a; float b; double c; cout<<"la variabile intera di nome a occupa: "<Potete anche provare, scaricare, modificare il codice direttamente su IDEONE
Attenzione, se volte modificare il codice, vi prego di non salvare ma fare invece un (vostro) fork (e magari condividetelo qui 😉 ).Conclusioni
Per concludere, dopo aver mandato in esecuzione il programma, potete notare che gli indirizzi delle variabili non sono successivi ma si distanziano appunto del numero di byte che occupa ogni variabile.
Ad esempio, se la variabile a si trova all'indirizzo: 0xbf82ab28 (0x vuol dire che si tratta di un indirizzo esadecimale) allora la variabile b (che sarà allocata nello spazio succssivo, non avrà indirizzo: 0xbf82ab29, ma: 0xbf82ab2c.
Questo perché, visto che un l'intero a occupa 4 byte, sarà allocato a partire da: 0xbf82ab28 + 4; 8 + 4 infatti fa 12, che in esadecimale diventa: c.
Allo stesso modo, la variabile c sarà allocata 4 byte più in là e cioè a: 0xbf82ab30 (c + 4 sarebbe 12 + 4 che fa 16 in decimale, che in esadecimale diventa 10H).Bisogna infine notare che:
- la dimensione occupata da una variabile può cambiare in generale da computer a computer, da sistema operativo a sistema operativo, da compilatore a compilatore (e quindi anche da linguaggio a linguaggio)
- l'ordine di allocazione cambia a secondo che ci si trova in una macchina Big-Endian o in una macchina Little-Endian (vedi ordine dei byte su wikipedia)