Come da quello che so sull'operatore '&', restituisce l'indirizzo di base dell'operando in memoria.Informazioni sull'operatore '&'
Immaginiamo il seguente scenario (come sulla mia macchina):
- sizeof (int) = 4 byte
- sizeof (float) = 4 byte
- sizeof (char) = 1 byte
Ora, se scrivo qualcosa di simile:
void main() {
int i = 5411;
int *ip = &i;
char *c = &i;
printf("%d",*ip);
printf("%c",*c);
}
Il primo printf() dovrebbe darmi 5411. Parlando del secondo printf(), l'indirizzo di base di i contiene 10101001 (8 bit di ordine superiore = 1 byte per il puntatore di tipo char). Quindi * c dovrebbe darmi 169, che quando convertito in% c è un carattere non valido.
Ma il compilatore mi sta restituendo '#' o qualche altra uscita valida. Perché è così ? Qualsiasi input?
EDIT (tratto dal commento dell'autore su una delle risposte):
Questo è stato solo un caso fittizio, da quando ero lontano dalla macchina reale.
Il caso reale è i = 5411
In ogni caso, se si tenta di "stampare" un "carattere" verrà visualizzato come un carattere, non come il codice intero corrispondente. –
probabilmente qualcosa a che fare con la codifica dei caratteri in uso, direi. –
Sì, anch'io sono d'accordo. Ma ci deve essere una ragione per ottenere il valore "#" dall'ultimo printf(). Non è un valore spazzatura. –