在 C 中,您可以转换简单的数据类型,如int
,float
和指向这些的指针。
现在我假设如果你想从指向一种类型的指针转换为另一种类型的值(例如 from *float
to int
),强制转换和取消引用的顺序无关紧要。即对于一个变量float* pf
,你有(int) *pf == *((int*) pf)
. 有点像数学中的交换律...
然而,情况似乎并非如此。我写了一个测试程序:
#include <stdio.h>
int main(int argc, char *argv[]){
float f = 3.3;
float* pf = &f;
int i1 = (int) (*pf);
int i2 = *((int*) pf);
printf("1: %d, 2: %d\n", i1, i2);
return 0;
}
在我的系统上,输出是
1: 3, 2: 1079194419
因此,转换指针似乎与转换值的工作方式不同。
这是为什么?为什么第二个版本没有做我认为应该做的事?
这是平台相关的,还是我以某种方式调用未定义的行为?