Concetti Chiave
- L'operatore di indirizzo '&' restituisce l'indirizzo di memoria di una variabile, fondamentale per funzioni come scanf() che richiedono indirizzi di memoria.
- La conversione di tipo può essere implicita, eseguita automaticamente dal compilatore, o esplicita, determinata dal programmatore tramite l'operatore di typecasting.
- Le conversioni implicite seguono regole come le usual arithmetic conversions e l'integral promotion, adattando i tipi di dati in maniera coerente.
- Il debugger emette un warning quando c'è il rischio di perdita di informazioni durante una conversione di tipo.
- La conversione di un char in un int può variare tra sistemi, influenzando il segno del risultato; il typecasting esplicito può forzare il tipo di dato desiderato.
Operatore di indirizzo
L’operatore di indirizzo & da come risultato l’indirizzo di memoria della variabile richiesta. E utile per la funzione scanf() che legge in input , poiché richiede che gli argomenti siano indirizzi di memoria di variabili e non valori di variabili.
L’operatore di conversione di tipo permette di convertire una variabile di un tipo in un
altro tipo.
Ci sono due tipi di conversione:
- conversione implicita di tipo (coercion): fatta dal compilatore quando ci sono espressioni con tipi diversi
- conversione esplicita di tipo (typecasting): definita esplicitamente dal programmatore utilizzando un determinato operatore
Regole per convertire dati:
- usual arithmetic conversions, per long double, double, float
- integral promotion, per long unsigned int, long int, unsigned int, int
In caso di possibile perdita di informazioni durante la conversione il debugger produce un messaggio di warning.
Quando un char è convertito in un int il risultato può essere negativo, dipende dalla macchina (su alcuni sistemi, se il bit a sinistra di un char e 1 il risultato e negativo, su altri sistemi invece, il char viene trasformato in un int aggiungendo degli 0 a sinistra quindi e sempre positivo).
In tutte le espressioni e possibile forzare il tipo di dato del risultato con la conversione esplicita (typecasting) utilizzando l’operatore unario cast: (