关于每个数据类型个字节在内存中的存储地址(以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

oc学习之路-----搞死指针之内存存储int类型的更多相关文章

  1. Qt 学习之路 2(38):存储容器

    Qt 学习之路 2(38):存储容器 豆子 2013年1月14日 Qt 学习之路 2 38条评论 存储容器(containers)有时候也被称为集合(collections),是能够在内存中存储其它特 ...

  2. oc学习之路----多级指针的使用和内存分析

    ---恢复内容开始--- 精髓:要熟悉指针的使用,首先要熟悉指针的各种状态存得是什么数据.(以一级指针 int *p1 二级指针:int **p2 三级指针:int ***p3为例) 一级指针:*p1 ...

  3. oc学习之路----APNS消息推送从证书到代码(2015年4月26号亲试可用)

    前言:看这篇博客之前要准备:首先的有一个99刀的个人开发者账号或者199刀的企业开发者账号,其次你用的是apns消息推送,(本人之前四处打听有没有其他消息推送的方法:收获如下:首先如果想做到apns的 ...

  4. oc学习之路----application.keyWindow.rootViewController与self.window.rootViewController与[self.window makeKeyAndVisible];小发现

    刚才调试的时候除了一些小问题,有一段代码要重用 NSString *key = @"CFBundleVersion"; // 取出沙盒中存储的上次使用软件的版本号 NSUserDe ...

  5. oc学习之路----代理模式2-使用步骤

    之前已经写过一个个人关于代理模式的一些看法,现在就来总结一下使用代理模式的步骤吧. 1.先搞清楚谁是谁的代理(delegate) ● 2.定义代理协议,协议名称的命名规范:控件类名 + Delegat ...

  6. oc学习之路----代理模式

    今天刚学完oc的代理模式,觉得有点新奇,第一次接触,原理 A完成一件事,但是自己不能完成,于是他找个代理人B 替他完成这个事情,他们之间便有个协议 (protocol),B继承该协议来完成A代理给他的 ...

  7. oc学习之路----scrollView的代理模式

    右图是OC里面scrollView的代理的描述,从这里可以开出来,任何对象都可以作为scorllView的代理对象只要实现了UIScrollViewDelegate这个协议,为什么呢,原因要追究到UI ...

  8. oc学习之路----QQ聊天界面

    用到的技术:自定义cell,通知机制,代理模式 transform 1.自定义cell(通过代码自定义cell) ①首先新建一个类继承UITableViewCell ②重写initWithStyle: ...

  9. oc学习之路----通过代码自定义cell

    需求背景:由于tableView中每一个cell的数据与布局都不一样,故不能用xib实现功能,这是用代码写自定义cell就有必要了. 步骤 1.新建一个继承自UITableViewCell的类 2.重 ...

随机推荐

  1. javaScript & jquery完美判断图片是否加载完毕

    好久没写东西了,正好最近因为工作需要,写了一个瀑布流异步加载的程序. 今天就不谈瀑布流,来谈一下关于load的问题. ----------------------------------------- ...

  2. stream_context_create解决file_get_contents超时处理

    stream_context_create作用:创建并返回一个文本数据流并应用各种选项,可用于fopen(),file_get_contents()等过程的超时设置.代理服务器.请求方式.头信息设置的 ...

  3. Polygon Table - Google Chrome

    Polygon table by Pedro Amaro Santos Lisboa, Portugal posted at http://forums.cgsociety.org/showthrea ...

  4. MYSQL ERROR 1130: Host is not allowed to connect to this MySQL server

    今天安装MYSQL遇到MYSQL ERROR 1130: Host is not allowed to connect to this MySQL server, 试了很多办法都不行 skip-gra ...

  5. 定时显示div

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org ...

  6. uva 1335 - Beijing Guards

    竟然用二分,真是想不到: 偶数的情况很容易想到:不过奇数的就难了: 奇数的情况下,一个从后向前拿,一个从前向后拿的分配方法实在太妙了! 注: 白书上的代码有一点点错误 代码: #include< ...

  7. js 模块化

    http://kb.cnblogs.com/page/132461/ http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth. ...

  8. front-end

    http://info.1688.com/detail/1139720782.html http://segmentfault.com/q/1010000000136513 http://h5apps ...

  9. GRUB引导——menu.lst的写法

    转自menu.lst的写法.menu.lst的写法 1.menu.lst的写法之一 首先我们看一下我的Fedora 4.0 中的/boot/grub/menu.lst 的内容: default=0  ...

  10. Swift与Objective-C中的闭包

    Swift Code: func makeIncrementor(forIncrement amount: Int) -> (() -> Int,() -> Int) { func ...