Ho cercato attraverso il sito ma non ho ancora trovato una risposta a questo.In C, perché non è possibile assegnare un valore intero a un int * nello stesso modo in cui un valore stringa può essere assegnato a un char *?
È più facile (almeno per me) spiegare questa domanda con un esempio.
Non capisco perché questo è valido:
#include <stdio.h>
int main(int argc, char* argv[])
{
char *mystr = "hello";
}
Ma questo produce un compilatore di avviso ("l'inizializzazione rende puntatore da interi senza un cast"):
#include <stdio.h>
int main(int argc, char* argv[])
{
int *myint = 5;
}
mia comprensione di il primo programma è quello che crea una variabile chiamata mystr di tipo pointer-to-char, il cui valore è l'indirizzo del primo carattere ('h') della stringa letterale "ciao". In altre parole con questa inizializzazione non si ottiene solo il puntatore, ma si definisce anche l'oggetto ("ciao" in questo caso) a cui punta il puntatore.
Perché, quindi, non sembra che int *myint = 5;
ottenga qualcosa di analogo a questo, cioè creare una variabile denominata myint di tipo pointer-to-int, il cui valore è l'indirizzo del valore '5'? Perché questa inizializzazione non mi dà il puntatore e definisce anche l'oggetto a cui punta il puntatore?
Penso che una domanda più equivalente sarebbe "perché non posso' int * myint = & 5; '?" – chux
Il letterale stringa valuta il puntatore e il valore letterale numerico viene valutato sul numero stesso. –