2010-10-08 11 views

risposta

22

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).

+0

Grazie amico per questo. –

5

Perché è necessario l'indirizzo per inserire il valore che legge. Se dichiari la variabile come puntatore, lo scanf non avrà bisogno dello &.

1

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().

1

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.

9

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); 
1

come valore sta per essere memorizzati, (dove?), L'indirizzo di memoria. così scanf() si occupa dell'operatore (&).