打印
[DSP编程]

指针与强制类型转换

[复制链接]
820|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
蒋博1026|  楼主 | 2019-10-23 21:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
指针与强制类型转换

1、变量的数据类型的含义

(1)、所有的类型的数据存储在内存中,都是按照二进制格式存储的。所以内存中只有0和1,不知道是int的还是float的

或者是其它类型的。

(2)、int、char、short等属于整形,他们的存储方式(数据转换成二进制往内存中放的方式)是相同的,只是内存格子

的大小不同而已(所以这几种整形就彼此叫二进制兼容格式);而float和double的存储方式彼此不同,和整形更不同。

(3)、int a = 5;编译器给a分配4字节空间,并且将5按照int类型的存储方式转成二进制存到a所对应的内存空间中去(a

做左值的);我们printf去打印a的时候(a此时做右值),printf内部的vsprintf会按照格式化字符串(就是printf传参

的第一个字符串中的%d之类的东西)所代表的类型去解析a所对应的内存空间,解析出来的值用来输出。也就是说,存进去

时是按照这个变量本身的数据类型来存储的(譬如本例中a为int,所以按照int格式来存储);但是取出来时是按照printf

中%d之类的格式化字符串的格式来提取的。此时虽然a所代表的内存空间中的二进制序列(比如101010并没有改变),但是

怎么理解(怎么把这些二进制数转换成数字)就不一定了。譬如我们用%d来解析,那么还是按照int格式解析,那么值自然

是5;但是如果用%f来解析,则printf就以为a所对应的内存空间存储的是一个float类型的数,会按照float类型来解析,值

自然就会是一个很奇怪的数字了。

总结:C语言中的数据类型的本质,就是决定了这个数在内存中怎么存储的问题,也就是决定了这个数如何转换成二进制的

问题。一定要记住的一点就是内存只是存储了这些二进制数字1和0,而不管怎么解析这些数字。

2、分析几个题目:

(1)、按照int类型存却按照float类型取        一定会出错

(2)、按照int类型存却按照char类型取         有可能出错也有可能不出错

(3)、按照short类型存却按照int类型取        有可能出错也有可能不出错

(4)、按照float类型存却按照double类型取     一定会出错

3、指针的数据类型的含义

(1)、指针的本质是:变量,指针就是指针变量

(2)、一个指针涉及2个变量:一个是指针变量自己本身,一个是指针变量指向的那个变量

(3)、int *p; 定义指针变量时,p(指针变量本身)是int *类型,*p(指针指向的那个变量)是int类型的。

(4)、int *说白了就是指针类型,只要是指针类型就是占4字节,解析方式都是按照地址的方式来解析(意思就是里面存

的32个二进制加起来表示一个内存地址)的。结论就是:所有的指针类型(不管是int*还是char*还是double*)的解析方式

是相同的,都是地址。

(5)、对于指针所指向的那个变量来说,指针的类型就很重要了,指针所指向的那个变量的类型(它所对应的内存空间的

解析方法)要取决于指针类型。譬如指针是int * 的,那么指针所指向的变量就是int类型的。

4、指针数据类型转换实例分析

(1)、int和char类型都是整形,类型是兼容的。所以互转的时候有时候是错的,有时候是对的。

(2)、int和char的不同在于char只有一个字节而int有四个字节,所以int的范围比char大。也就是说在char范围内int和

char是可以互转的,不会出错,但是超出了char的范围就会出错了。

(3)、int和float的解析方式是不兼容的,所以int*转成float*再去访问绝对会出错。

使用特权

评论回复

相关帖子

沙发
zhangmangui| | 2019-10-23 22:25 | 只看该作者
学习   指针一直没理解透

使用特权

评论回复
板凳
蒋博1026|  楼主 | 2019-10-24 08:43 | 只看该作者
zhangmangui 发表于 2019-10-23 22:25
学习   指针一直没理解透

我也是发现好多基础都没理解到位,才开始恶补的,从基础开始补

使用特权

评论回复
地板
zhangmangui| | 2019-10-24 21:04 | 只看该作者
蒋博1026 发表于 2019-10-24 08:43
我也是发现好多基础都没理解到位,才开始恶补的,从基础开始补

好样的   一直在学习

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

323

主题

1820

帖子

18

粉丝