Что значит int i = *(int*)&x;?
&x - берется адрес (указатель), по которой находится значение переменной x(int*) - обозначение того, что со значением адреса, который получен ранее, нужно работать как с intтипом (хотя ранее то был float)
* - получаем значение по этому адресу, а оно уже будет не float, а  int. Что в результате сохраняет в i совсем другое число. Только лишь в бинарном представлении ничего не изменилось
*(int*)&x - взять адрес переменной x и разыменовать его как адрес переменной типа int.