int 指针指向 float:同一块内存的不同解释
2026/8/19小于 1 分钟
int 指针指向 float:同一块内存的不同解释
float f = 3.14f;
int *p = (int *)&f;
printf("%d", *p);一、p 指向哪里?
p 保存的是 f 的地址:
p ─────→ f 所占的 4 字节内存但 p 的类型是:
int *所以:
*p会把这 4 个字节按照 int 来解释。
二、3.14 在内存中是什么?
float 通常使用 IEEE 754 单精度格式。
3.14f 的 32 位表示为:
01000000 01001000 11110101 11000011即:
0x4048F5C3三、为什么打印出来不是 3.14?
p 是 int *,因此:
*p不是按照 float 解码,而是直接把:
0x4048F5C3当成一个 32 位 int。
最高位为 0,因此是正数:
0x4048F5C3 = 1078523331所以在这种典型环境下:
输出:1078523331四、核心
同一个地址
↓
float * → 按 float 解释
int * → 按 int 解释指针类型决定解引用时如何解释这块内存。
注:严格 C 语言语义下,直接用 int * 读取 float 对象涉及严格别名规则;这道题主要考查底层二进制表示和类型解释。

