博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oc学习之路-----搞死指针之内存存储int类型
阅读量:4317 次
发布时间:2019-06-06

本文共 792 字,大约阅读时间需要 2 分钟。

关于每个数据类型个字节在内存中的存储地址(以int为例)

先上图

如题,为什么说好的*p = &c是1啊,为什么是513呢,一开始,我也觉得挺惊讶的,后面听老师分析了一下才知道怎么回事,但是还是有那么一个为题不知道怎么回事,经过上网查了下资料,终于有了些眉目,但是一样有一个问题(后面回说道),切让我抛砖引玉。

要理解这个程序,首先我们要了解每个数据类型的字节排序

而字节排序又分两种:一种是 big endian 一种是little endian

big endian意思是讲高序字节(高位)存储到所分配到内存起始位置,而little endian是讲低字节(地位)存储到所分配到内存的起始位置。

如下图

了解了吧,然后再说话题目,为什么是513呢?

是因为int *p 这个int是用于取值用得,记住是取值用得,而分配内存用到的指针是8个字节,这个不用说了把,在一个系统里面指针是固定字节数的,不分数据类型,在我这台机器上是8个字节,一般都是8个字节的。

所以,当int类型的指针p指向char类型的指针的时候,取得不是一个字节,也不是8个字节,是4个字节(int类型的)

所以从内存地址ff10记起,取四个字节,好了,上面那张excel图里面,就是从0000 0001往下数四行,在通过高到低排序,有几种可能,但是要得到结果513,只有一种可能,就是第一幅图,并且排序是从下往上(高位到低位),还有一点,java的字节排序都是big endien的,而c的就是分cpu的。

还有一个问题,在第一张图,为什么内存地址相差一位呢?有没有一种方法可以取得数据类型的每一个字节所在内存地址呢?还是我概念有些模糊了?仅个人见解,如有不对请不要给面的指出。欢迎交流q1413557667

转载于:https://www.cnblogs.com/superYou/p/4143912.html

你可能感兴趣的文章
补几天前的读书笔记
查看>>
HDU 1829/POJ 2492 A Bug's Life
查看>>
[UOJ UR#16]破坏发射台
查看>>
修改spring boot 启动logo
查看>>
《Android深度探索》第六章心得体会
查看>>
jQuery绑定键盘事件
查看>>
java中的for嵌套(一个好例子)
查看>>
MathML
查看>>
SQL 排名函数
查看>>
IIS与ApplicationPool重启检测自动化解决方案
查看>>
zabbix3.4实现邮件报警
查看>>
Xpath提取一个标签里的所有文本
查看>>
11 吐司 Toast 代码案例
查看>>
CKplayer:视频推荐和分享插件设置
查看>>
通过服务修改widgetUI
查看>>
win10连接无线网,开启移动热点,手机连接它手机一直显示获取ip地址中。
查看>>
MapReduce的倒排索引
查看>>
Heterogeneity Activity Recognition Data Set类别
查看>>
服务中的 API 网关(API Gateway)
查看>>
Android--TextView第一个单词大写
查看>>