棘手的指针问题

2023-12-23

我在过去的关于 c 中指针的考试问题上遇到了麻烦,这是我从这个链接找到的,http://www.cl.cam.ac.uk/teaching/exams/pastpapers/y2007p3q4.pdf http://www.cl.cam.ac.uk/teaching/exams/pastpapers/y2007p3q4.pdf

问题是这样的:

一个 C 程序员正在与一个 小端机,8 位 一个字有 1 个字节和 4 个字节。这 编译器支持未对齐访问和 使用 1、2 和 4 个字节来存储 char, 分别是short和int。这 程序员写了以下内容 定义(右下)来访问 主存储器中的值(左下):

地址字节偏移量
----------0 --1-- 2-- 3
0x04 | 0x04 10 00 00 00
0x08 | 0x08 61 72 62 33
0x0c | 0x0c | 33 00 00 00
0x10 | 0x10 78 0c 00 00
0x14 | 0x14 08 00 00 00
0x18 | 0x18 01 00 4c 03
0x1c | 0x1c | 18 00 00 00

int **i=(int **)0x04;  
short **pps=(short **)0x1c;  

struct i2c {  
int i;  
char *c;  
}*p=(struct i2c*)0x10;

(a) 写下以下 C 表达式的值:

**i  
p->c[2]  
&(*pps)[1]  
++p->i  

I get

**i == 0xc78  
p->c[2] == '62'  
++p->i == 0x1000000  

我不明白第三个问题(&(*pps)[1]),有人可以解释一下这里发生了什么吗?我知道 pps 指针已被取消引用,但随后运算符的地址已应用于该值。这不是就像询问常量的地址吗,例如如果我这样做

int i = 7;  
int *p = &i;
&(*p)   //would this mean address of 7??  

预先感谢您的任何帮助。


The []运算符优先于&操作员。所以代码取消引用pps获取数组的第一个元素short*。由于这个元素也是一个指针,我们可以将它视为一个数组,并在它所指向的右侧查找该元素,wth[1]。最后,我们获取该元素的地址。

注意到这一点可能会有用&p[i]是相同的p + i- 它给你一个指向元素的指针i位置在哪里的右边p指着。

中间值为:

pps == 0x1c
*pps == 0x18
&(*pps)[1] == *pps + 1 == 0x1A

(the +1添加两个字节,因为它用在short*)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

棘手的指针问题 的相关文章

随机推荐

  • 测试指针的有效性 (C/C++)

    有什么方法可以确定 当然 以编程方式 给定的指针是否 有效 检查 NULL 很容易 但是像 0x00001234 这样的东西呢 当尝试取消引用此类指针时 会发生异常 崩溃 跨平台方法是首选 但特定于平台 适用于 Windows 和 Linu
  • name='' 的无效表单控件无法聚焦于隐藏元素

    我有一个有条件出现的元素 需要在可见时填写 使用 ng required 但是 当它不可见时 我收到以下错误 name 的无效表单控件不可聚焦 如何强制 ng required 仅在元素可见时才工作 我不想在表单中输入 novalidate
  • 如何让 cx_Oracle 在 64 位 Itanium Windows 上工作?

    我在 64 位 Itanium 服务器上运行 Windows Server 2003 该服务器还运行 64 位 Oracle 10 2 并且我想安装适用于 Python 2 5 的 cx Oracle 我之前在 Windows 和 Linu
  • 序列化图表时出现异常

    我仍在使用新发布的 protobuf net 版本 但遇到了一个我不明白的问题 让我们考虑下面的代码 ProtoContract class Node public Node Children new List
  • GeoDjango Distance() 相关模型注解

    我有一个Profile类是 OneToOne 的Location模型 每个配置文件都有一个且唯一的位置 class Location models Model profile models OneToOne Profile point Po
  • 一年中使用 iPhone SDK 的天数?

    我正在尝试获取当年的天数 当我尝试解决方案时当月有多少天使用 iPhone SDK https stackoverflow com questions 1179945 number of days in the current month
  • 如何检测我的应用程序是否在兼容模式下运行? [复制]

    这个问题在这里已经有答案了 可能的重复 如何检测真实的 Windows 版本 https stackoverflow com questions 57124 how to detect true windows version 我有一个使用
  • 未解析的外部符号 LNK2019

    首先 我知道这个问题遍布整个网站 但我几乎浏览了所有问题 似乎无法找出问题所在 这是 VS 2012 中的 谢谢 Socket h pragma once include
  • 将一个片段替换为活动组内的另一个片段

    我在小组活动中有一个片段 我想用另一个片段替换它 FragmentTransaction ft getActivity getFragmentManager beginTransaction SectionDescriptionFragme
  • 如何在 C# 中以编程方式生成按键事件?

    如何以编程方式创建一个模拟键盘上按键的事件 该问题标记为 WPF 但到目前为止的答案是特定的 WinForms 和 Win32 要在 WPF 中执行此操作 只需构造一个 KeyEventArgs 并在目标上调用 RaiseEvent 即可
  • gcc 中的 -ffreestand 选项是什么?

    What is ffreestanding在海湾合作委员会 它是干什么用的 我遇到了以下情况 gcc ffreestanding m32 c kernel c o kernel o 并且不明白 这到底是什么意思 A freestanding
  • 如何找出 SQL Server 中哪些表访问最多或使用最频繁

    我目前的情况是 我需要找出哪些表被频繁使用 或者在给定的一段时间内我们的应用程序中使用的次数 假设从某个开始日期到结束日期 我想在这里获得的详细信息是表名及其被访问的次数 例如 tableName No Of Access Table5 1
  • 如何在 MVVM WPF 应用程序中取消窗口关闭

    单击 取消 按钮 或右上角的 X 或 Esc 后如何取消从特定表单退出 WPF
  • FlashDevelop Haxe (Flash) 调试器

    FlashDevelop中有Haxe的调试器吗 FlashDevelop 现在附带一个运行良好的 Haxe 调试器 仅限 Flash 目标
  • 是否可以在 Web 浏览器上运行与 SDL+OpenGL 代码绑定的 C++?

    我的客户希望她的网站有一个渲染 3D 的应用程序 浅 3D 的东西 我们在 3D 世界中只绘制平面正方形 但网络编程不是我的专长 所以我正在寻找可以从网络浏览器运行 C 程序的东西 但我想 如果是这样的话 那么客户端必须先下载程序 而这不是
  • 根据用户选择禁用单选按钮

    我有 2 组单选按钮 每组有 4 个选项 这 4 个选项在两个类别中都是相同的 我不想允许在两个类别中进行相同的选择 例如 如果在第一类别中选择选项 1 则用户现在只能从第二类别中的选项 2 3 4 中进行选择 这个问题之前已经被问过 但似
  • 从设置禁用权限并返回到我们的应用程序后崩溃

    当当前 Activity 跳转到系统设置页面禁用权限然后再次切换当前 Activity 时 应用程序崩溃 第 1 步 打开应用程序并授予所有必要的权限 第 2 步 单击 主页 按钮 因此应用程序处于后台 第 3 步 在 设置 中手动更改权限
  • “电子邮件不能为空”使用用户名或电子邮件设计

    我正在关注这个操作方法如何 允许用户使用用户名或电子邮件地址登录 https github com plataformatec devise wiki How To Allow users to sign in using their us
  • 如何使用 ASP.NET MVC + SignalR 强制服务器不断发送事件数据?

    ExportClient班级有OnTickRecieved事件 这可以帮助我接收一些数据 来自市场的出价 我想要的只是在浏览器中的图表上实时接收这些数据 当我按下GoUI 端的按钮 它调用Go 控制器中的方法 然后什么也没有发生 这是合乎逻
  • 棘手的指针问题

    我在过去的关于 c 中指针的考试问题上遇到了麻烦 这是我从这个链接找到的 http www cl cam ac uk teaching exams pastpapers y2007p3q4 pdf http www cl cam ac uk