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:
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:
significa che la funzione non ritorna alcun valore al termine della sua esecuzione. Questo, invece:
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:
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:
sono entrambi assegnamenti validi. Attenzione, invece, che scrivere:
è 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:
alla fine c4
conterrà la lettera E
o 68
in quanto a D
corrisponde 67
.