c - 在内存 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
解决方案
int *ptr
据说存储在0xb36d28。0xb36d28 处的内存以 little-endian 顺序包含 0x00b36d50(并且无论指针是四字节还是八字节,它都包含该值,因为接下来的四个字节为零)。因此,ptr
是 0xb36d50。如果指针是四个字节,那么地址ptr[3]
是0xb36d50之外3•4个字节,所以它是0xb36d5c。(由于这符合已知答案,我们得出的结论是指针是四个字节,而不是八个。)
推荐阅读
- google-cloud-platform - 使用提醒政策的 GKE 提醒
- javascript - 反应本机构建错误:尝试调用虚拟方法'boolean com.facebook.react.uimanager.FabricViewStateManager.hasStateWrappper()
- ios - GCDWebServer:如何更改服务器上的文件权限以进行 WebDAV 操作?(iOS)
- java - 在将 Object[] 转换为 String[] 时,我正在为以下代码获取 java.lang.ArrayStoreException
- python - 递归函数在调整时调用自己的次数不同,即使两个函数都做同样的事情并产生相同的结果
- javascript - 输入函数时如何在 React 中禁用按钮
- android - 更新到 com.android.tools.build:gradle:4.2.1 后生成错误
- php - 格式化系统()输出
- windows - 用于在 Windows 上查找 ping 损失不同于 0% 的正则表达式
- ruby - 使用 Heroku SendGrid 插件从 Sinatra Web 应用程序发送电子邮件