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

-------------------------------------------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型的。

  进行强制类型转换后,内存空间里面的内容是不会发生改变的,改变的是你去读取这个内存空间时的解析方法。如果你读取时的解析方法和你存进去时候的解析方法不一致就会导致数据错误(当然整形的强制类型转换未必会出错,只要是小的内存空间往大的内存空间里面转,应该问题就不大)。所以,进行强制类型转换到额时候,一定要对这个数据类型有一个清晰的认知(包括内存空间和解析方式)。

C语言中的强制类型转换的更多相关文章

  1. 详细理解javascript中的强制类型转换

    将值从一种类型转换为另一种类型通常称为类型转换,这是显式的情况:隐式的情况称为强制类型转换,JavaScript 中的强制类型转换总是返回标量基本类型值,如字符串.数字和布尔值. 如何理解: 类型转换 ...

  2. C#中的强制类型转换与as转换的区别

    C#中的强制类型转换 例如有ClassA与ClassB两个类创建两个类的对象进行转换 1 2 ClassA a = new ClassA();  ClassB b = new ClassB(); 如果 ...

  3. 谈 JavaScript 中的强制类型转换 (2. 应用篇)

    这一部分内容是承接上一篇的, 建议先阅读谈 JavaScript 中的强制类型转换 (1. 基础篇) 前两章讨论了基本数据类型和基本包装类型的关系, 以及两个在类型转换中十分重要的方法: valueO ...

  4. JS在if中的强制类型转换

    JS在if中的强制类型转换 众所周知,JS在很多情况下会进行强制类型转换,其中,最常见两种是: 1.使用非严格相等进行比较,对==左边的值进行类型转换 2.在if判断时,括号内的值进行类型转换,转化为 ...

  5. C++中的强制类型转换

    在C语言中,强制类型转换的方式为(Type)Expression,另外还有一种现在已经不用的旧式写法Type(Expression),这两种方式是等价的. 但是,C语言的强制类型转换方式存在一些问题: ...

  6. PHP中的强制类型转换

    学过静态语言开发的朋友对类型转换不会陌生,比如Java.C#.C++等.静态语言的好处就是变量强制必须指定类型,这也是编译的要求,所以大部分编译型的语言都会有强制变量类型的要求.而PHP据说也会在PH ...

  7. 慕课网-安卓工程师初养成-2-10 Java中的强制类型转换

    来源:http://www.imooc.com/code/1241 相信小伙伴们也发现了,尽管自动类型转换是很方便的,但并不能满足所有的编程需要. 例如,当程序中需要将 double 型变量的值赋给一 ...

  8. ActionScript 3 中的强制类型转换

    以前AS中是这样进行强制类型转换的:假设有一个类叫做Class1,我们声明了一个它的对象 c1,如果想要将它转换成Class2类型,只要这样写: Class2(c1); 在AS3中你依然可以这样写,但 ...

  9. Java中的强制类型转换

    例如,当程序中需要将 double 型变量的值赋给一个 int 型变量,该如何实现呢? 显然,这种转换是不会自动进行的!因为 int 型的存储范围比 double 型的小.此时就需要通过强制类型转换来 ...

随机推荐

  1. [翻译] FSLineChart

    FSLineChart A line chart library for iOS. 一个iOS的线状图控件. Installing FSLineChart - 安装 Add the contents ...

  2. FTP上传(批处理)

    将以下内容保存为名为ftp_upload.txt的文件: open 192.168.11.199testw\adadminboc.123binaryput e:\wt.zipbye 在命令提示符下运行 ...

  3. windows下的FTP命令

    假设要连接的FTP信息如下: FTP Server: FtpTest User: tester Password: 123123 打开Windows的开始菜单,执行"运行"命令,在 ...

  4. Linux命令--权限管理

    chmod命令 Linux/Unix 的文件调用权限分为三级 : 文件拥有者.群组.其他.利用 chmod 可以藉以控制文件如何被他人所调用. 使用权限 : 所有使用者 语法 chmod [-cfvR ...

  5. Linux的ssh的known_host文件

    在平时工作中,有时候需要SSH登陆到别的Linux主机上去,但有时候SSH登陆会被禁止,并弹出如下类似提示: WARNING: REMOTE HOST IDENTIFICATION HAS CHANG ...

  6. gluoncv 导入方式

    了解了sys.path和python 的import 的话,之前修改gluoncv 的方式就可以有了新的简单的方法: 如果你pip install gluoncv的,然后脚本又git clone了,发 ...

  7. [POI2006]TET-Tetris 3D

    题目 二维线段树板子题啊 但是惊讶的发现我不会打标记 毕竟内层是线段树不能\(pushup\)也不能\(pushdown\) 于是考虑一下标记永久化 其实非常显然\(mx_i\)表示区间最大值,\(t ...

  8. 【jQuery mobile】启程跨平台开发之旅

    APICloud创建跨平台应用有两种方法,一种在云端直接创建,一种是在APICloud Studio中创建. 创建一个应用 1.注册账号 2.创建HelloApp应用 3.留意应用的ID . 4.下载 ...

  9. Kali-linux Gerix Wifi Cracker破解无线网络

    Gerix Wifi Cracker是另一个aircrack图形用户界面的无线网络破解工具.本节将介绍使用该工具破解无线网络及创建假的接入点. 9.3.1 Gerix破解WEP加密的无线网络 在前面介 ...

  10. SOE 部署错误 ClassFactory cannot supply requested class问题及解决方案

    一.问题描述 虽然SOE开发已经老早出来了(ArcGIS 10.1 不再支持DCOM开发,所以以往的基于AO+WebService需要转变思路),不过由于跟工作关联性不是很大,一直未系统学习过.网上下 ...