В чем разница между sizeof (3.0) и sizeof (3.0f)
Я ожидал, что они оба дадут одинаковый результат (sizeof float) .. но он разный.
В 32-битной машине, компилятор gcc, sizeof (3.0f) => 4 sizeof (3.0) => 8
Почему так?
Потому что 3.0 - это двойное число. См. Синтаксис C Типы с плавающей точкой .
Константы с плавающей точкой могут быть записано в десятичной записи, например 1,23. Научная нотация может быть использована путем добавления е или Е с последующим десятичным экспонента, например 1.23e2 (который имеет значение 123). Либо десятичная точка, либо требуется показатель степени (в противном случае, число является целочисленной константой). C99 ввел шестнадцатеричное константы с плавающей точкой, которые следуют аналогичные правила за исключением того, что они должны быть с префиксом 0x и используйте p, чтобы указать шестнадцатеричный показатель. Как десятичные и шестнадцатеричные константы с плавающей точкой может содержать суффикс f или F для обозначения константа типа float, l или L для указать тип long double или left без суффикса для двойной константы.
подробнее
3.0 - это double, а не float.
double
float
doubles в два раза шире float с.
doubles
РЕДАКТИРОВАТЬ : 3.0d только в C #