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型的。
进行强制类型转换后,内存空间里面的内容是不会发生改变的,改变的是你去读取这个内存空间时的解析方法。如果你读取时的解析方法和你存进去时候的解析方法不一致就会导致数据错误(当然整形的强制类型转换未必会出错,只要是小的内存空间往大的内存空间里面转,应该问题就不大)。所以,进行强制类型转换到额时候,一定要对这个数据类型有一个清晰的认知(包括内存空间和解析方式)。
C语言中的强制类型转换的更多相关文章
- 详细理解javascript中的强制类型转换
将值从一种类型转换为另一种类型通常称为类型转换,这是显式的情况:隐式的情况称为强制类型转换,JavaScript 中的强制类型转换总是返回标量基本类型值,如字符串.数字和布尔值. 如何理解: 类型转换 ...
- C#中的强制类型转换与as转换的区别
C#中的强制类型转换 例如有ClassA与ClassB两个类创建两个类的对象进行转换 1 2 ClassA a = new ClassA(); ClassB b = new ClassB(); 如果 ...
- 谈 JavaScript 中的强制类型转换 (2. 应用篇)
这一部分内容是承接上一篇的, 建议先阅读谈 JavaScript 中的强制类型转换 (1. 基础篇) 前两章讨论了基本数据类型和基本包装类型的关系, 以及两个在类型转换中十分重要的方法: valueO ...
- JS在if中的强制类型转换
JS在if中的强制类型转换 众所周知,JS在很多情况下会进行强制类型转换,其中,最常见两种是: 1.使用非严格相等进行比较,对==左边的值进行类型转换 2.在if判断时,括号内的值进行类型转换,转化为 ...
- C++中的强制类型转换
在C语言中,强制类型转换的方式为(Type)Expression,另外还有一种现在已经不用的旧式写法Type(Expression),这两种方式是等价的. 但是,C语言的强制类型转换方式存在一些问题: ...
- PHP中的强制类型转换
学过静态语言开发的朋友对类型转换不会陌生,比如Java.C#.C++等.静态语言的好处就是变量强制必须指定类型,这也是编译的要求,所以大部分编译型的语言都会有强制变量类型的要求.而PHP据说也会在PH ...
- 慕课网-安卓工程师初养成-2-10 Java中的强制类型转换
来源:http://www.imooc.com/code/1241 相信小伙伴们也发现了,尽管自动类型转换是很方便的,但并不能满足所有的编程需要. 例如,当程序中需要将 double 型变量的值赋给一 ...
- ActionScript 3 中的强制类型转换
以前AS中是这样进行强制类型转换的:假设有一个类叫做Class1,我们声明了一个它的对象 c1,如果想要将它转换成Class2类型,只要这样写: Class2(c1); 在AS3中你依然可以这样写,但 ...
- Java中的强制类型转换
例如,当程序中需要将 double 型变量的值赋给一个 int 型变量,该如何实现呢? 显然,这种转换是不会自动进行的!因为 int 型的存储范围比 double 型的小.此时就需要通过强制类型转换来 ...
随机推荐
- 用ISA2006配置单网卡缓存服务器
有些公司在部署ISA服务器之前已经有了自己的网络访问解决方案,例如通过硬件防火墙访问互联网,如果这种网络访问解决方案运行效果较好,公司就未必希望用ISA来替代当前的方案,毕竟稳定是第一位的.但在这种情 ...
- Python学习---Python的框架基础学习
框架基础 框架实质: 所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端 B/S结构的响应: import socket def handle_requ ...
- Java学习---程序设计_面试题[2]
百度2017春招笔试真题编程题集合之买帽子 // 2017-10-09 // 题目描述 // 度度熊想去商场买一顶帽子,商场里有N顶帽子,有些帽子的价格可能相同.度度熊想买一顶价格第三便宜的帽子,问第 ...
- css动画 文字闪烁效果
/*定义页面基础CSS*/ body{ font-family: 'microsoft yahei',Arial,sans-serif; color: #EFEFEF; background: #22 ...
- Linq to Entities,ADO.NET Entity Framework 模型优先
一.概念: Database First(数据库优先):存在的DB------------->生成Data Model .edmx文件 Model First(模型优先):Data Model ...
- 彻底关闭Firefox自动更新的方法
自己最近在使用firefox进行自动化测试时,发现配置好的firefox总是会自动更新,主要是因为一些高版本的浏览器无法安装firepath,没有firepath的火狐浏览器使用起来总是有很多的不方便 ...
- 理解活在Iphone中的那些App (一)
关于一个app的生命 干IOS开发两年多了,如果把大学中的时间也算上,编程也有六年了.这些时间中,从一个懵懵懂懂的学徒,变成一个还算熟练的码农,也多多少少有一点反思.于是,边促成了理解活在Iphone ...
- hdu-3397 Sequence operation 线段树多种标记
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3397 题目大意: 0 a b表示a-b区间置为0 1 a b表示a-b区间置为1 2 a b表示a- ...
- BZOJ2780:[SPOJ8093]Sevenk Love Oimaster(广义SAM)
Description Oimaster and sevenk love each other. But recently,sevenk heard that a girl named ChuYuXu ...
- Kali-linux使用Metasploitable操作系统
Metasploitable是一款基于Ubuntu Linux的操作系统.该系统是一个虚拟机文件,从http://sourceforge.net/projects/metasploitable/fil ...