C语言中的强制类型转换

先直接放程序吧,后面还有总结。

-------------------------------------------start-----------------------------------------------

#include<stdio.h>
#include<string.h>

int main(void)
{
int a = 9;

float *p = (float *)&a;

printf("*(int *)p = %d.\n", *(int *)p);


printf("*p = %f.\n", *p); //一开始时,编译器按照int型的存储方式把数字9放到a变量的内存空间中(4字节)
//但是强制类型转换后,指针变量p以为自己指向的地址是一个float类型的空间,所
//以如果此时直接去解引用这个指针,则按照float类型的解析方式去解析int类型的
//内存空间(虽然空间也是4字节,但是解读里面的二进制数据的时候会出现错误。就
//好比一张纸我刚刚写东西进去的时候写的中文,但是你拿出来读的时候却非得按照英
//文来读,纸的大小和纸上的内容是没有变化的(都是4字节,都是我之前写进去的数据)
//但是你用英文来读我的写进去的中文,鬼知道你会读成什么鬼样。

return 0;
}

--------------------------------------------end-----------------------------------------

总结:在C语言中,你定义一个变量并对其进行赋值的时候,你需要意识到,这个变量初始定义的类型就包含了两层含义了。

第一层含义:这个数据类型表示的内存空间的大小

第二层含义:编译器把我设定的数值放到这个内存空间是,是怎么把我的数据解析成二进制后再存进去这个内存空间的呢?是按照你说设定的

数据类型的存储方式解析后存进去的。比如存储方式有整形的(int, short, char )、float型 的、double型的。

  进行强制类型转换后,内存空间里面的内容是不会发生改变的,改变的是你去读取这个内存空间时的解析方法。如果你读取时的解析方法

和你存进去时候的解析方法不一致就会导致数据错误(当然整形的强制类型转换未必会出错,只要是小的内存空间往大的内存空间里面转,应该问题就不大)。

所以,进行强制类型转换到额时候,一定要对这个数据类型有一个清晰的认知(包括内存空间和解析方式)。

 

猜你喜欢

转载自www.cnblogs.com/xing-ting/p/10218992.html