Какая разница между типами в языке C между двумя кодами - PullRequest
3 голосов
/ 17 февраля 2012

код один:

int a = 0x42500000;
float *f = (float *)&a;    
printf("%f", *f);     //output 52.00000

код два:

int a = 0x42500000;
float f = (float)a;    
printf("%f", f);        //output 0.00000

почему код два выдает 0,00000, кто подскажет почему?

Ответы [ 2 ]

4 голосов
/ 17 февраля 2012

Первый фрагмент интерпретирует содержимое ячейки памяти a, как если бы оно было плавающим, без приведения . Если вы действительно не знаете, что делаете, вы не хотите этого делать, это почти всегда ошибка.

Второй фрагмент возвращает значение a для float, которое должно дать вам то же значение, что и int. Это действительно делает это. Ваш код дает мне 1112539136.000000. Какой компилятор вы используете и получаете 0 там?

2 голосов
/ 17 февраля 2012

Первое приведение говорит компилятору предположить, что место, где хранится a, является float, и рассмотрим его аналогично.
Второй говорит компилятору предположить, что a является float, и рассмотреть его аналогичным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...