【问题标题】:Finding the value of pointers in memory C在内存 C 中查找指针的值
【发布时间】:2018-10-08 23:57:59
【问题描述】:

鉴于下面的数据集和底部显示的答案 (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

【问题讨论】:

  • in the image 然后我们发明了文本以及复制/粘贴功能。
  • 我们不知道sizeof(int),因为您的问题没有指定平台。常见的int 大小为 2 和 4 字节。
  • 用 sizeof(int) 更新。在这种情况下,它是 4。@Stargateur 图像是因为复制和粘贴会使格式混乱。
  • @ejscribner:您可以在粘贴的文本周围放置<pre></pre> 标签以保持其格式。
  • @TurboJ:你不需要int的大小。 &ptr[3]ptr+3,以字节表示,ptr 加上指向int 的指针大小的三倍。

标签: c pointers memory dynamic-memory-allocation


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-11-10
    • 2012-08-29
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 2012-03-27
    • 1970-01-01
    相关资源
    最近更新 更多