Le variabili e le costanti in C
Per variabile si intende una porzione di memoria atta a contenere un determinato dato che potrà poi essere modificato nel corso dell'uso del programma. Essa può essere inizializzata all'atto della sua dichiarazione con un valore di default o può essere dichiarata senza alcun valore. In tal caso il linguaggio non garantisce un valore
iniziale utile. Ad esempio una variabile può essere dichiarata ed inizializzata in due modi diversi. Per doppio passaggio:
// dichiaro
int x;
// inizializzo
x = 14;
o direttamente:
// dichiaro ed inizializzo
int x = 14;
Una costante, invece, è una porzione di memoria che viene dichiarata per contenere un determinato tipo di dato e ne conserva il valore per tutta la durata dell'uso del programma senza mai poterne modificare il valore. Ogni variabile o costante nel C deve essere identificata da un nome al quale si farà poi riferimento nel corso dello svolgimento del programma per leggere o scriverci dati. Il nome delle variabili in C è arbitrario e può
avere lunghezza variabile però il compilatore si interesserà solo delle prime 8 lettere che lo compongono. Quindi anche se a prima vista un dato di nome "variabile1" pare diverso da "variabile2", il compilatore restituirà errore poichè vedrà due variabili con lo stesso nome ovvero "variabil". Il C è un linguaggio che basa la sua struttura sui dati. Dati diversi, infatti, equivalgono a cose diverse. Questo tipo di gestione permette di avere un buon uso della memoria perché ad ogni tipo di dato è dedicata la giusta quantità di memoria e in più dà la possibilità di usare o creare strutture ad hoc per le diverse esigenze di sviluppo. Il C gode delle presenza di 6 tipi di dati base:
char
int
long
short
float
double
Il char è il dato adibito alla gestione dei caratteri. Ogni volta che viene dichiarata una variabile di tipo char essa occupa una quantità di memoria pari a 8 bit (1 byte). Il char, nonostante sia effettivamente un tipo di dato numerico, permette la gestione del suo valore come una normale "lettera". Un array (vettore) di char permette la virtualizzazione di una stringa mentre, in altri linguaggi, esiste ormai un tipo di dato string dedicato. Un esempio di dichiarazione di un dato char inizializzato è:
char carattare = ' a' ;
E' importante notare come definire il carattere '8', ad esempio, è totalmente diverso dalla definizione di un valore intero 8. Un char che contiene il carattere '8' in realtà avrà al suo intero il valore numerico che, in base alla codifica in uso, equivale a quel determinato carattere mentre una variabile numerica che contiene 8 avrà proprio quel valore preciso in memoria.
L' int è il tipo adibito a contenere dati numerici di numeri interi o meglio definiti come numeri naturali. Tali numeri, pertanto, devono contenere numeri senza virgole, frazioni, parti immaginarie, etc... un dato di tipo int, all'atto della sua dichiarazione, occupa 16 bit (2 byte). I valori che un int può assumere vanno da -32.768 a +32.767 se si usa il segno (valori positivi o negativi) o va da 0 a 65535 per soli numeri interi. Un esempio di dichiarazione di un dato int inizializzato è:
int numIntero = 14;
Long può essere visto come un particolare int creato appositamente per ovviare al problema di uso di numeri più grandi di quelli che l' int offre. Esso occupa una quantità di memoria pari a 32 bit (4 byte) ed offre la possibilità di usare valori che vanno da -2.147.483.648 a +2.147.483.647 per numeri con segno o da 0 a 4.294.967.295 per numeri privi del segno. Un esempio di dichiarazione di un dato long inizializzato è:
long numIntLong = 1000000000;
Lo short è un dato molto simile all'int ma che trova limitazioni più restrittive per quanto riguarda il suo valore massimo o minimo. Esso infatti occupa 8 bit (1 byte) e può perciò coprire un range che va da -127 a +128 pe numeri con segno mentre va da 0 a 256 per numeri senza segno.
I float e i double sono particolari tipi di dati che danno la posibilità di rappresentare i numeri in virgola mobile, ovvero i numeri reali. La differenza tra i due tipi di dati sta nella quantità di memoria utilizzata e pertanto nell'accuratezza con cui i numeri possono essere rappresentati. Un float, infatti, richiede una quantità di memoria pari a 32 bit (4 byte) mentre un double richiede 64 bit (8 byte). Un esempio di dichiarazione di un dato float e di un double inizializzato è:
double dblVirgola = 5.023;
float fltVirgola = 7.8;
SIGNED ed UNSIGNED
Come si è visto, ogni dato ha la possibilità di considerare l'insieme dei suoi valori limitato diversamente in base all'uso che se ne vuole fare. Ad esempio due dati, entrambi int, potranno assumere valori massimi diversi se uno è sempre positivo mentre l'altro assume sia valori positivi che negativi. E' importante avere in mente tale concetto per poter avere a disposizione sempre il miglior tipo di dato per le nostre esigenze. Di default i dati in C vengon visti come signed e perciò è possibile usare il segno per definire il valore in maniera positiva o negativa. Qualora ci fosse bisogno di definire esplicitamente che un numero non necessita di una rappresentazione negativa allora si può dichiarare la viariabile in questo modo:
unsigned int Numero = 15;
altrimenti è possibile usare la sintassi:
signed int Numero = - 15;
che è equivalente a
int Numero = - 15;
COSTANTI
Il discorso trattato fin ora era studiato per l'uso delle variabili; tuttavia, tutte le regole di cui sopra valgono anche per quanto riguarda il trattamente di dati costanti. Bisogna comunque ricordare che essi mantengono il valore iniziale e perciò quanto detto vale solo all'atto della dichiarazione e mai durante lo svolgimento del programma. Un esempio di dichiarazione di una costante può essere:
const float PIGRECO = 3. 14;
Da notare la presenza della parola chiave const che definisce il dato come costante.
CASTING E CONCLUSIONE
Visto il tipo di gestione dei dati in C, esso viene definito come linguaggio a tipizzazione statica, ovvero dove i tipi di dati vengono definiti all'inizio e mantenuti pressoché
costanti per la durata del software. Tuttavia esiste una pratica definita casting mediante la quale è possibile cambiare il tipo di un dato per poterlo adattare ad una certa circostanza. Il casting si avvale della sintassi del tipo:
variabile1 = ( tipo) variabile2
Ad esempio per ottenere un int da un valore float è possibile seguire il seguente codice di esempio:
float fltNumero = 2. 36;
int intNumero;
intNumero = (int) fltNumero;
In questo modo intNumero assumerà valore 2, ovvero la parte intera del numero float.
Conoscere i dati in C significa essere a conoscenza delle fondamenta di un linguaggio ed è perciò importante studiare bene l'argomento prima di addentrarsi in argomenti più avanzati.
.png)
0 commenti:
Posta un commento