j = &i;
Компилятор должен бы выдать предупреждение о несоответствии типов указателей.
Настоящие ковбои могут подавить предупреждение при помощи
j = (float*)&i;
k = (float)*j;
Тут приведение (float) и не нужно, так как j сам указатель на float.
Но в k запишется мусор, слепленный из содержимого i и трёх байтов после него (вероятнее всего - будет взято два байта указателя и первый байт старого значения k).