C 语言 - 指针和强制转换

Ale*_*ves -1 c pointers casting

我知道指针是如何工作的,但是我在理解这个指针转换时遇到了一些麻烦。

float f;
scanf("%f", &f);
unsigned int x = *(unsigned int*)&f;
Run Code Online (Sandbox Code Playgroud)

有人可以解释我这是如何工作的吗?

Joh*_*ode 7

unsigned int x = *(unsigned int*)&f;
Run Code Online (Sandbox Code Playgroud)

基本上意味着“获取 的地址f,假装它是 an 的地址unsigned int而不是 a float,然后取消引用结果。

它基本上是尝试将位从finto复制到x而不进行任何类型转换。

正如评论中提到的,这违反了称为“严格别名规则”的规则,并且这样做的行为是undefined。这可能会按预期工作。可能不会。