Ближайшее, что вы получите:
union floatptr_t {
float f;
void *p;
};
С другой стороны, это не совсем то, что вы просили.С другой стороны, это 100% стандарт ...
[править]
Да, вы можете использовать sizeof
, чтобы сравнить размер указателя с float
, double
,и long double
, и выберите один.Но как @R.указывает на то, что многие значения указателя будут сопоставлены с NaN
, поэтому вы не сможете ничего сделать с этими значениями с плавающей запятой, кроме как приведения их обратно к указателю ... И даже это не гарантируется (хотя, вероятно,на практике).
Но если вы не можете делать что-либо со значением с плавающей запятой, кроме приведения его обратно к указателю, тогда вам лучше использовать объединение, так как это будеткак эффективный с точки зрения пространства и фактически будет работать переносимо.