• oc学习之路-----搞死指针之内存存储int类型


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

  • 相关阅读:
    方法中的散列可变参数
    方法中的散列可变参数
    策略模式
    策略模式
    HashSet,TreeSet
    HashSet,TreeSet
    ArrayList和LinkedList
    ArrayList和LinkedList
    关于鼠标悬浮标签元素效果(CSS:cursor属性)
    关于鼠标悬浮标签元素效果(CSS:cursor属性)
  • 原文地址:https://www.cnblogs.com/superYou/p/4143912.html
Copyright © 2020-2023  润新知