2010-10-08 17 views

Respuesta

22

Porque C solo tiene parámetros de "paso por valor", por lo que para pasar una "variable" para poner un valor, debe pasar su dirección (o un puntero a la variable).

+0

Gracias hombre por esto. –

5

Porque necesita la dirección para colocar el valor que lee. Si declara su variable como un puntero, el scanf no necesitará el &.

1

Cuando ingresa algo con un dispositivo de entrada estándar (generalmente el teclado), los datos que se obtienen deben ser stored en alguna parte. Debe tener point en algún lugar de la memoria para que los datos puedan almacenarse allí. Para point una ubicación de memoria, necesita el address de esa ubicación. Por lo tanto, debe pasar la dirección de su variable utilizando el operador & con scanf().

1

Todos los demás han descrito bien que sscanf necesita poner su salida en algún lugar, pero ¿por qué no devolverlo? Porque tiene que devolver muchas cosas: puede completar más de una variable (impulsada por el formateo) y devuelve un int que indica cuántas de esas variables completó.

9

scanf no toma "la dirección del operador" (&) ". Se necesita un puntero. La mayoría de las veces, el puntero a la variable de salida se obtiene utilizando el operador de dirección de la llamada scanf, p.

int i; 
scanf("%i", &i); 
printf("number is: %d\n", i); 

Pero esa no es la única forma de hacerlo. Lo que sigue es tan válida:

int* iPtr = malloc(sizeof(int)); 
scanf("%i", iPtr); 
printf("number is: %d\n", *iPtr); 

Así es:

int i; 
int iPtr = &i; 
scanf("%i", iPtr); 
printf("number is: %d\n", i); 
1

como va el valor a almacenar, (¿dónde?), En la dirección de memoria. así que scanf() trata con el operador (&).

Cuestiones relacionadas