Skip to content

Dichiarazione di variabili

Il C è un linguaggio fortemente tipizzato: ogni variabile deve essere dichiarata prima del suo uso e le deve essere associato un tipo, che rappresenterà che tipologia di dato la variabile andrà a contenere. In C una variabile è dichiarata nei seguenti modo:

<tipo_var> <nome_var>;
<tipo_var> <nome_var> = <valore_iniziale>;

la differenza tra le due dichiarazioni sta nell'inizializzazione della variabile. Nel primo caso, infatti, la variabile è dichiarata, ma non le è stato assegnato alcun valore. In altre parole, è come se avessimo definito una scatola vuota a cui abbiamo dato un nome, ma la scatola resta pur sempre vuota e quindi non possiamo utilizzarla. Per usare la variabile in una formula dovremo darle un valore, che potremo assegnare sia con una funzione di input, tipo la scanf_s sia con un'istruzione di assegnamento. Nel secondo caso, invece, non appena definiamo la variabile la inizializziamo e quindi è già pronta per essere utilizzata.

Tipi di variabili in C

I tipi di dato primitivi che possiamo associare alle variabili in C sono elencati di seguito.

Tipo intero

Per definire una variabile contenente un numero intero, ovvero senza virgola, ci sono diverse opzioni:

Tipo di dato Tipo in C Dimensione Range
Intero int 2 o 4 byte Da -32.768 a 32.767 o da -2.147.483.648 a 2.147.483.647
Intero senza segno unsigned int 2 o 4 byte Da 0 a 65.535 o da 0 a 4.294.967.295
Intero corto short 2 byte Da -32.768 a 32.767
Intero corto senza segno unsigned short 2 byte Da 0 a 65.536
Intero lungo long 8 byte Da -9223372036854775808 a 9223372036854775807
Intero lungo senza segno unsigned long 8 byte Da 0 a 18446744073709551615
Caratteri char 1 byte Da -128 a 127 o da 0 a 255

Tipo float

Tipo di dato Tipo in C Dimensione Range
Reali a singola precisione (fino a 6 cifre decimali) float 4 byte Da 1.2E-38 a 3.4E+38
Reali a doppia precisione (fino a 15 cifre decimali) double 8 byte Da 2.3E-308 a 1.7E+308
Reali lunghi a doppia precisione (fino a 19 cifre decimali) long double 10 byte Da 3.4E-4932 a 1.1E+4932

Tipo void

Il tipo void è un tipo particolare. Esso, infatti, non può essere utilizzato come tipo nella dichiarazione di variabili. Normalmente, è usato all'interno delle funzioni per indicare l'assenza di dati. Infatti:

void funzione() {

}

significa che la funzione non ritorna alcun valore al termine della sua esecuzione. Questo, invece:

int main(void) {

}

indica che la funzione ritorna un dato intero, ma non prende alcun parametro.

Assegnamento tra variabili

In C, quando si dichiara una variabile di un certo tipo, il compilatore si aspetta che il valore contenuto in tale variabile sia del tipo specificato. Facciamo qualche esempio:

int n = 10;
float f = 3.4;
int r = 10.6;
float s = 20;
double w = 32.67;
char c = 'a';
char d = 65;

Assegnamento tra intero e float e viceversa

Tutti gli assegnamenti precedenti sono “legali” in C. Tuttavia, c'è da considerare un aspetto importante: quando si assegna un numero con la virgola (float o double) ad un intero, la parte con la virgola sarà eliminata e quindi, di fatto, il numero sarà troncato. Quando, invece, si assegna un numero senza intero ad un float o ad un double, la virgola sarà aggiunta automaticamente, a cui seguiranno degli 0. Ad esempio in float s = 20, s assumerà il valore di 20.00000.

I caratteri

Un carattere in C è definito come un simbolo alfanumerico o speciale contenuto tra virgolette singole, come ad esempio 'A', 'b', '4', 'è', \n. Il tipo di dato char è particolare perch´ può essere visto in due modi: sia come carattere, sia come intero. Ad ogni lettera, cifra o simbolo, infatti, corrisponde un intero che può essere determinato guardando alla tabella ASCII. Ad una variabile di tipo char può essere quindi assegnato un numero intero o un carattere indistintamente:

char c1 = 65; //Codice per A in ASCII
char c2 = 'A';

sono entrambi assegnamenti validi. Attenzione, invece, che scrivere:

char c3 = '65';

è errato a livello sintattico, in quanto tra le virgolette singole va un unico carattere e 65 sono due caratteri distinti.

Visto che i caratteri possono essere trattati come interi e viceversa, sono legali le operazioni tra caratteri e interi. Ad esempio:

char c4 = 'D';
c4 = c4 + 1;

alla fine c4 conterrà la lettera E o 68 in quanto a D corrisponde 67.