Как на Си преобразовать тип?
    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;
}
Все :)

Приведение типа - это не операция над значением, а операция над адресом. Оно не меняет значение, оно меняет отношение компилятора к указателю на данный обьект.
int i = 10;
int *p = &i;
char *c = (char *) p;

*c = '\xFF';

Вопрос - куда будет записано 0xFF? :)