相关疑难解决方法(0)

在C中,如果我对一个指针进行转换和取消引用,那么我先做哪一个是否重要?

在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)

因此,转换指针似乎与转换值的方式不同.

这是为什么?为什么第二个版本不符合我的想法呢?

这是平台依赖的,还是我以某种方式调用未定义的行为?

c casting undefined-behavior

13
推荐指数
2
解决办法
1万
查看次数

标签 统计

c ×1

casting ×1

undefined-behavior ×1