在C语言中,你可以投既简单数据类型,例如int,float以及指向这些.
现在我假设如果你想从一个类型的指针转换为另一个类型的值(例如从*floatto转换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;
}
Run Code Online (Sandbox Code Playgroud)
在我的系统上输出是
1: 3, 2: 1079194419
Run Code Online (Sandbox Code Playgroud)
因此,转换指针似乎与转换值的方式不同.
这是为什么?为什么第二个版本不符合我的想法呢?
这是平台依赖的,还是我以某种方式调用未定义的行为?