首页 > 解决方案 > 在内存 C 中查找指针的值

问题描述

给定下面的数据集和底部显示的答案 (b36d5c),如何计算 &ptr[3] 的这个值。我只是无法确定它所指的数据集的哪个区域以及如何将大小添加到该区域,但我知道答案是正确的。

sizeof(int) = 4

数据集从 0xb36d00 开始,大小为 128。
            0xb36d00: 48 6d b3 00 00 00 00 00 4c 6d b3 00 00 00 00 00 Hm......Lm......
            0xb36d10: 50 6d b3 00 00 00 00 00 30 6d b3 00 00 00 00 00 Pm......0m......
            0xb36d20: 04 6d b3 00 00 00 00 00 50 6d b3 00 00 00 00 00 .m......Pm......
            0xb36d30: 18 6d b3 00 00 00 00 00 1c 6d b3 00 00 00 00 00 .m.......m......
            0xb36d40: 48 6d b3 00 00 00 00 00 58 6d b3 00 00 00 00 00 嗯......Xm......
            0xb36d50: 44 6d b3 00 00 00 00 00 4c 6d b3 00 00 00 00 00 Dm......Lm......
            0xb36d60:00 6d b3 00 00 00 00 00 0c 6d b3 00 00 00 00 00 .m.......
            0xb36d70: 68 6d b3 00 00 00 00 00 30 6d b3 00 00 00 00 00 hm......0m......
    int array[] 存储在:0xb36d00
       int *ptr 存储在:0xb36d28
短 *shortPtr 存储在:0xb36d28
          int x 存储在:0xb36d38
        短 y 存储在:0xb36d14
   int ***由以下定义: (int ***)(((int **)0xb36d0c) + 2)

&ptr[3] 的值是多少?
b36d5c

标签: cpointersmemorydynamic-memory-allocation

解决方案


int *ptr据说存储在0xb36d28。0xb36d28 处的内存以 little-endian 顺序包含 0x00b36d50(并且无论指针是四字节还是八字节,它都包含该值,因为接下来的四个字节为零)。因此,ptr是 0xb36d50。如果指针是四个字节,那么地址ptr[3]是0xb36d50之外3•4个字节,所以它是0xb36d5c。(由于这符合已知答案,我们得出的结论是指针是四个字节,而不是八个。)


推荐阅读