Come dice il titolo, mi chiedo sempre perché lo address of
operatore (&) debba prendere l'address of
operatore.Perché scanf deve prendere l'indirizzo dell'operatore
risposta
Poiché C ha solo parametri "pass-by-value", quindi per passare una "variabile" in cui inserire un valore, è necessario passare il suo indirizzo (o un puntatore alla variabile).
Perché è necessario l'indirizzo per inserire il valore che legge. Se dichiari la variabile come puntatore, lo scanf
non avrà bisogno dello &
.
Quando si immette qualcosa con un dispositivo di input standard (in genere tastiera), i dati che devono passare devono essere stored
da qualche parte. È necessario point
da qualche parte nella memoria in modo che i dati possano essere memorizzati lì. A point
una posizione di memoria, è necessario il address
di quella posizione. Quindi devi passare l'indirizzo della tua variabile usando l'operatore &
con scanf()
.
Tutti gli altri hanno descritto bene che sscanf deve mettere l'output da qualche parte, ma perché non restituirlo? Perché deve restituire molte cose - può riempire più di una variabile (determinata dalla formattazione) e restituisce un int che indica quante di quelle variabili ha compilato.
scanf non accetta "l'indirizzo dell'operatore (&) ". È necessario un puntatore . Molto spesso il puntatore alla variabile di uscita viene ottenuto utilizzando l'operatore address-of nella chiamata scanf, ad es.
int i;
scanf("%i", &i);
printf("number is: %d\n", i);
Ma questo non è l'unico modo per farlo. Di seguito è altrettanto valida:
int* iPtr = malloc(sizeof(int));
scanf("%i", iPtr);
printf("number is: %d\n", *iPtr);
Così è:
int i;
int iPtr = &i;
scanf("%i", iPtr);
printf("number is: %d\n", i);
come valore sta per essere memorizzati, (dove?), L'indirizzo di memoria. così scanf() si occupa dell'operatore (&).
Grazie amico per questo. –