prof. Nunzio Brugaletta | Programmazione e linguaggio C |
A volte può interessare effettuare dei cambiamenti al volo per conservare i risultati di determinate operazioni in variabili di tipo diverso; principalmente quando si va da un tipo meno capiente ad un tipo più capiente. In tali casi il linguaggio C mette a disposizione del programmatore un costrutto chiamato cast.
Es:
main() { int uno, due; float tre; uno = 1; due = 2; tre = uno/due; printf("%f",tre); }
Tale programma nonostante le aspettative (dettate dal fatto che la variabile tre è dichiarata float) produrrà un risultato nullo. Infatti la divisione viene effettuata su due valori di tipo int, il risultato viene conservato temporaneamente in una variabile di tipo int e, solo alla fine, conservato in una variabile float. È evidente, a questo punto, che la variabile tre conterrà solo la parte intera (cioè 0).
Affinché la divisione produca il risultato atteso, è necessario avvisare il C di convertire il risultato intermedio prima della conservazione definitiva nella variabile di destinazione.
Tutto ciò è possibile utilizzando il costrutto in questione che ha la seguente sintassi:
(nome-di-tipo) espressione
Utilizzando questo costrutto, il programma, si scriverebbe così:
main() { int uno, due; float tre; uno = 1; due = 2; tre = (float) uno/due; printf("%f",tre); }
In questo caso il programma fornisce il risultato atteso. Infatti il quoziente viene calcolato come float e quindi, dopo, assegnato alla variabile tre.
In definitiva il costrutto cast forza una espressione a essere di un tipo specifico (nel nostro caso una divisione intera viene forzata a fornire un risultato di tipo virgola mobile).
http://ennebi.solira.org | ennebi@solira.org |