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;
}