浮点指针被类型化为char指针时会发生什么?

1 c casting

int main()
{
    float f = 12.2;
    char *p1;
    p1 = (char *)&f;
    printf ("%d", *p1);
}
Run Code Online (Sandbox Code Playgroud)

这输出51.

pax*_*blo 17

你可以float*变成一个char*很好的,这是使用这样一个可能有问题的野兽.

当您取消引用它时,您只需获取char第一部分的表示(但请参见下文,以了解它的真正含义,并不像您想象的那样清晰).

如果你在谈论IEE754浮点数,IEEE754浮点数为12.2(abcd是八位位组):

S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM (sign, exponent, mantissa).
0 10000010 10000110011001100110011
a aaaaaaab bbbbbbbccccccccdddddddd
Run Code Online (Sandbox Code Playgroud)

00110011在最后的是,你所看到的51(0x33).你看到浮点数的最后一位的原因是因为它在内存中存储(在小端架构中):

00110011 00110011 01000011 01000001
dddddddd cccccccc bbbbbbbb aaaaaaaa
Run Code Online (Sandbox Code Playgroud)

这意味着意志的char*演员float*指向该dddddddd部分.

在大端架构,你会得到aaaaaaaa位,01000001或65(0×41).