Если я это назначениеРазыменование указателя из другого псевдонима несовместимого типа
float x = 16.8;
unsigned int i = *(unsigned int*) &x;
Что будет значение переменной i
? Что это за логика этого задания?
Если я это назначениеРазыменование указателя из другого псевдонима несовместимого типа
float x = 16.8;
unsigned int i = *(unsigned int*) &x;
Что будет значение переменной i
? Что это за логика этого задания?
С кодом, как это, вы могли бы увидеть ответ в вашем точном случае:
#include <stdio.h>
int main(void)
{
float x = 1;
unsigned int i = *(unsigned int*) &x;
printf("%d\n", i);
return 0;
}
Этот тип присвоения является незаконным, литьем указатель на float
в указатель на unsigned int
, а затем разыгрывать его, вы против Строгое правило сложения.
Как было сказано в комментариях, нет строгого ответа. Даже если с округлой x
как:
float x = 16;
Вы, вероятно, не имеют ожидаемого i = 16
.
В большинстве случаев ваш код будет казаться правильным, вы не будете предупреждены или что-нибудь еще, и код будет запущен. Так что будьте осторожны!
Неприменимо поведение, применяется строгое правило сглаживания. –
его целое число, следовательно, не десятичные точки. Также почему бы не протестировать его в компиляторе просто? Будет приводить к UB – amanuel2
Вы должны использовать союз, по-видимому, иначе поведение будет неопределенным. См. [Здесь] (http://stackoverflow.com/questions/98650/what-is-the-strict-aliasing-rule) для получения дополнительной информации. –