i = (float)i;
— Так как переменная слева
i
имеет тип
int
, то значение выражения справа
(float)i
будет при присваивании преобразовываться обратно в
int
.
printf("%f", i);
— Область памяти, начинающаяся с адреса, по которому в стек при вызове
printf
пемещается значение типа
int
переменной
i
(и, соответственно, занимающая
sizeof (int)
байт) интерпретируется как хранящая значение типа
float
(размером
sizeof (float)
байт и захватывающая дополнительно посторонний мусор из стека). Т. е. это даже не арифметическое (пусть даже с округлением) преобразование.
Должно работать:
int main() {
int i = 1;
printf("%f", (float)i); // выводим на экран float
return 0;
}