Como dice el título, siempre me pregunto por qué scanf
debe tomar el operador address of
(&).Por qué scanf debe tomar la dirección del operador
Respuesta
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).
Porque necesita la dirección para colocar el valor que lee. Si declara su variable como un puntero, el scanf
no necesitará el &
.
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()
.
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ó.
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);
como va el valor a almacenar, (¿dónde?), En la dirección de memoria. así que scanf() trata con el operador (&).
- 1. ¿Por qué Scanf requiere &?
- 2. tomar la dirección de un objeto temporal
- 3. ¿Cómo recuerdo qué camino debe tomar PRIOR? CONÉCTATE POR consultas
- 4. ¿por qué ruby scanf es tan lento?
- 5. ¿Qué dirección debo tomar para mejorar mis habilidades de programación?
- 6. ¿Por qué aparece Scanf para omitir la entrada?
- 7. ¿Por qué es ilegal tomar temporalmente la dirección de un rvalue?
- 8. ¿Por qué debería pop() tomar un argumento?
- 9. ¿Por qué la clase Singleton debe sellarse?
- 10. ¿Qué significa espacio en scanf?
- 11. ¿Scanf() toma '\ n' como entrada sobrante del scanf anterior()?
- 12. ¿Por qué anular el operador()?
- 13. ¿Por qué el operador% se conoce como el operador "módulo" en lugar del operador "restante"?
- 14. Usando scanf para aceptar la entrada del usuario
- 15. ¿Por qué System.nanoTime() tomar 4.400 segundos nano
- 16. ¿Es legal tomar la dirección de un parámetro de función?
- 17. ¿Debe ser el parámetro del operador de asignación una referencia?
- 18. While scanf! = EOF o scanf == 1?
- 19. ¿El paréntesis debe colocarse siempre alrededor del operador ternario?
- 20. ¿Qué significa "operador = debe ser un miembro no estático"?
- 21. ¿Por qué el operador de asignación de copia debe devolver una referencia/referencia constante?
- 22. ¿Por qué el patrón del observador debe ser desaprobado?
- 23. ¿Por qué el operador "=" R no se debe usar en las funciones?
- 24. ¿Por qué mi operador de energía (^) no funciona?
- 25. ¿Por qué las sobrecargas del operador C# deben ser estáticas?
- 26. ¿Por qué la sobrecarga del operador no está disponible para las clases en Delphi?
- 27. ¿Por qué la dirección de la variable cambia entre ejecuciones?
- 28. ¿Por qué incluso necesitamos el operador "delete []"?
- 29. ¿Puedo tomar la dirección del elemento one-past-the-end de una matriz?
- 30. ¿Por qué C# no admite la sobrecarga del operador con pase por referencia?
Gracias hombre por esto. –