我有代码:
#include<stdio.h>
void main(){
int i;
float a=5.2;
char *ptr;
ptr=(char *)&a;
for(i=0;i<=3;i++)
printf("%d ",*ptr++);
}
我得到的输出为 102 102 -90 64
。我无法预测它是怎么来的,我对这行 ptr=(char *)&a;
感到困惑。任何人都可以向我解释它的作用吗?和其他变量一样,代码 *ptr++
递增?或者在这种情况下还有任何其他指针规则。
我是 C 的新手,所以请用简单的术语解释答案。提前致谢。
最佳答案
这叫做 cast .在 C 语言中,强制转换允许您将值从一种类型转换或重新解释为另一种类型。当你获取float
的地址时,你会得到一个float*
;将其转换为 char*
会为您提供一个指向内存中相同位置的指针,但假装那里存在的是 char
数据而不是 float
数据。
sizeof(float)
是 4
,因此根据 IEEE-754 single-precision format,从该位置开始打印四个字节可以得到构成 float 的字节。 .一些字节设置了高位,因此当解释为 signed char
然后转换为 int
进行显示时,由于 two's-complement representation,它们显示为负值。 .
表达式*ptr++
等同于*(ptr++)
,它首先递增ptr
,然后取消引用它之前的值;您可以将其视为同时取消引用和推进 ptr
。
关于c - 这行代码 `ptr=(char *)&a;` 实际上是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7571044/