Le variabili
Una variabile rappresenta uno spazio di memoria dove vengono memorizzati dei valori.
Nel linguaggio C le variabili devono essere prima dichiarate e poi inizializzate. La dichiarazione è una statement attraverso la quale si indica al compilatore di predisporre e riservare spazio in memoria per contenere il dato specificato, attraverso l’uso di un identificatore di riferimento a quella porzione di memoria. E’ possibile anche dichiarare più variabili allo stesso tempo:
int number, temp, index, max, min;
Nello standard C89 le variabili dovevano essere tutte dichiarate nella parte iniziale di un blocco di codice, sebbene lo standard C99 abbia superato questa prassi.
Dichiarazione
La dichiarazione di una variabile si compone di una dichiarazione di tipo e di un’ assegnazione di nome (o identificatore). La dichiarazione di tipo comporta l’utilizzo di una delle keyword riservate del linguaggio ed indica al compilatore il tipo di dato che la variabile deve contenere, mentre l’assegnazione del nome o identificatore é piuttosto libera, sebbene vi siano accorgimenti e convenzioni stilistiche che é buona pratica rispettare, allo scopo di rendere maggiormente comprensibile il nostro lavoro a coloro che dovranno leggerlo dopo di noi. Ciò detto, nel dichiarare una variabile bisogna evitare:
- di farla iniziare con un numero (es: int 3variabile)
- di farla iniziare con __ (underscore), utilizzati per i nomi dei tipi della libreria standard
- che essa inizi con una lettera maiuscola (non é un errore, ma é una convenzione largamente utilizzata)
- il nome della variabile non può contenere spazi
Inizializzazione
L’inizializzazione é la procedura attraverso la quale si attribuisce un valore alla variabile e avviene attraverso l’operatore di assegnamento (=) . E’ possibile dichiarare ed inizializzare più variabili allo stesso tempo, come nell’esempio seguente:
int var1 = 99, var4 = 150;
L’assegnazione diretta del valore ad una variabile prende il nome di “letterale”, in quanto, l’assegnazione di un valore alla valore alla variabile può avvenire anche dinamicamente, attraverso l’uso di una funzione, ad esempio.
double db = sqrt(44.44);
Le costanti
Una costante é uno spazio di memoria a sola lettura, cioè un valore che una volta assegnato non più essere alterato.
Una costante può essere inizializzata attraverso la keyword const. L’utilizzo di una costante comporta la sua inizializzazione contestualmente alla sua dichiarazione.
const float var1 = 9,99; → Corretto
short const var2 = 20; → Accettato
const int var 3;
var3 = 50; → Errore
La direttiva #define per le costanti
Una costante può anche essere dichiarata ed inizializzata con la direttiva #define che indica al preprocessore di sostituire tutte le occorrenze in cui compare il suo identificatore in fase di compilazione. In questo caso l’identificatore deve essere scritto in maiuscolo.
#define CIAO “Ciao a tutti” /*dichiarazione di costante di tipo stringa*/;
#define PIGRECO 3.14159 /*dichiarazione di costante di tipo numerico*/;
Tipi di dato fondamentali
La dichiarazione delle variabili e delle costanti implica la loro tipizzazione, ossia l’esplicita dichiarazione del tipo di dato che devono contenere allo scopo di riservare ad essi un adeguata quantità di memoria per contenerli. In C questi tipi di dato sono rappresentati dalla tabella seguente:
char | int | long | _Bool |
double | short | unsigned | _Complex |
float | signed | void | _Imaginary |
Specificatori di formato
Le funzioni printf e scanf comportano l’utilizzo di alcuni simboli detti “specificatori di formato” necessari a far comprendere al calcolatore il tipo di dato da inserire o da stampare a video. Tipicamente sono caratterizzati da un segnaposto e specificatori di conversione. Per praticità li elenchiamo nella tabella seguente:
% | Segnaposto generico | %o | Intero ottale |
%d | Intero Decimale | %c | Carattere singolo |
%f | Virgola mobile | %p | Variabili puntatore |
%s | Stringa | %% | Carattere percentuale |
%x | Intero esadecimale | \n | Nuova linea |
Specificatori di tipo
Anche il tipo di variabile può essere specificato nell’uso della funzione printf, indicando, sulla base della tabella precedente, gli opportuni simboli relativi al tipo:
Decimale | Ottale | Esadecimale | |
Short | %hd | %ho | %hx |
Long | %ld | %lo | %lx |
Long Long | %lld | %llo | %llx |
Per i valori unsigned si inserisce u al termine dello specificatore, omettendo la d in caso di valore intero (int):
printf(“unsigned int: %u”, nome_variabile)