UTNianos

Versión completa: [Info1] Duda sobre ejercicio de final
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola muchachos,

Estaba resolviendo la parte teórica de un final y se me dio por probar el código escrito en el final para poder responder las preguntas que piden.

el ejercicio es dado este codigo:

#include<stdio.h>

int main(void)
{
float numero=3.2;
int *ptr;

ptr=&numero;
printf("%f\n",numero);
printf("%f\n",*ptr);

return 0;
}

decir si da warnings, errores, si se crea el ejecutable, si lo hace que muestra en pantalla y si no lo hace que se modificaría.

Al compilar obtengo esto:

mauro@pc:~/ejemplos$ gcc ./volatil.c -o ./programa
./volatil.c: En la función ‘main’:
./volatil.c:8:8: aviso: asignación desde un tipo de puntero incompatible [activado por defecto]
./volatil.c:10:5: aviso: formato ‘%f’ espera un argumento de tipo ‘double’, pero el argumento 2 es de tipo ‘int’ [-Wformat]
mauro@pc:~/ejemplos$ ./programa
3.200000
3.199999
mauro@pc:~/ejemplos$

Conclución: se encuentran warnings, se crea el ejecutable y se muestra lo que puse.

PERO MI PREGUNTA ES: ¿POR QUÉ SE MUESTRA DE ESA FORMA?¿QUÉ PASÓ?

Gracias y espero sus respuestas
Debe ser por esto : printf("%f\n",*ptr);
Cuando vos declaraste ptr, dijiste que era un puntero a int y dps lo haces que apunte a un float.

Otra cosa, por ahí es al pedo la aclaración pero a vos en el final no te dejan probar estas cosas con la maquina. ES mejor no hacerlo y si darse cuenta mirando el codigo
Gracias caro por responder tan rápido, en realidad me di cuenta del problema con la asignación pero no tenía claro si iba a generar un error o un warning, me falta un poco de cancha en esos temas. Y lo que me generó curiosidad es lo del muestreo, que en uno muestra 3.2 y en otro 3.19999999 eso me dejo con ganas de saber porque paso eso. Y debe ser como decis el %f al int.
Si yo estoy casi segura que debe ser eso, tranca es normal pero viste para que despues no te acostumbres jaja =P Si tenes dudas esta el K&C que podes sacar la sintaxis y todo eso
Pensa que un punto flotante tiene un numero finito de valores, a diferencia de lso numeros reales que son infinitos. Entonces tenes infinitas lagunas entre numeros y siempre te tira lo mas aproximado que encontro. Por eso JAMAS se hacen comparaciones entre float. No tiene nada que ver el puntero a int o a float en este caso. En ambos casos, el puntero es de 2 bytes, no hay problema con eso, pero si te va a tirar un warning.
URLs de referencia