鱼C论坛

 找回密码
 立即注册
查看: 1120|回复: 2

[已解决]想请教友友一个小小的问题

[复制链接]
发表于 2023-4-29 23:23:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
char a[4][3][2] = {
        {
                {'a', 'b'}, {'c', 'd'}, {'e', 'f'}
        },
        {
                {'g', 'h'}, {'i', 'j'}, {'k', 'l'}
        },
        {
                {'m', 'n'}, {'o', 'p'}, {'q', 'r'}
        },
        {
                {'s', 't'}, {'u', 'v'}, {'w', 'x'}
        }
};
char (*pa)[2] = &a[1][0];
char (*ppa)[3][2] = &a[1];
//想要通过指针 pa 和 ppa 访问数组 a 中的 'x' 元素,请问表达式应该怎么写?
//答:*(*(pa+8)+1) 和 *(*(*(ppa+2)+2)+1))。
//这个答案不应该指向'r',
最佳答案
2023-4-30 00:41:08


非常感谢您指出错误。您是正确的,答案不应该指向 'r',而应该指向 'x'。因此,正确的表达式是:

*(*(pa+8)+1) 和 *(*(*(ppa+2)+2)+1)

其中,pa 是指向 a[1][0] 的指针,因此 *(pa+8) 将指向 a[3][2]。然后,对于指针 *(pa+8),加 1 将指向 a[3][2][1],因此 *(*(pa+8)+1) 将返回 'x'。

ppa 是指向 a[1] 的指针,因此 *(ppa+2) 将指向 a[3]。然后,对于指针 *(ppa+2),加 2 将指向 a[3][2],因此 *(*(*(ppa+2)+2)+1) 将返回 'x'。

再次感谢您的纠正。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-29 23:26:35 | 显示全部楼层
本帖最后由 isdkz 于 2023-4-29 23:41 编辑

您好!我能理解您的问题。这里有一个三维数组 a ,您希望通过指针 pa 和 ppa 访问数组中的元素'x'。我会帮您解答。

首先,需要纠正您提供的答案,它们都不是正确的访问元素'x'的方法。

您可以使用以下表达式来访问元素'x':

通过指针 pa 访问元素'x':
*(*(pa + 3 * 2) + 1)

通过指针 ppa 访问元素'x':
*(*(*(ppa + 2) + 2) + 1)

让我解释一下这些表达式的计算过程:

1. 对于 pa 指针:
    ·  pa 已经指向 a[1][0] ,因此我们需要从 a[1][0] 移动到 a[3][2] 的位置。
    · 由于 a 的第二维长度为3,我们需要移动2个完整的三维数组部分(即3 * 2 = 6个 char 元素)以及最后一个三维数组的前两个元素。
    · 所以,我们需要将 pa 指针移动8个 char 元素,即 pa + 3 * 2 。
    · 接下来,我们需要访问第二个元素(即'x'),因此我们需要在上一步的基础上再加1,即 *(pa + 3 * 2) + 1 。
    · 最后,我们需要解引用指针,得到 *(*(pa + 3 * 2) + 1) 。

2. 对于 ppa 指针:
    ·  ppa 已经指向 a[1] ,因此我们需要从 a[1] 移动到 a[3] 的位置。我们只需要将 ppa 指针移动2个位置,即 ppa + 2 。
    · 然后,我们需要访问第三个子数组(即 a[3][2] ),所以我们需要在上一步的基础上再加2,即 *(ppa + 2) + 2 。
    · 接下来,我们需要访问第二个元素(即'x'),因此我们需要在上一步的基础上再加1,即 *(*(ppa + 2) + 2) + 1 。
    · 最后,我们需要解引用指针,得到 *(*(*(ppa + 2) + 2) + 1) 。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-30 00:41:08 | 显示全部楼层    本楼为最佳答案   


非常感谢您指出错误。您是正确的,答案不应该指向 'r',而应该指向 'x'。因此,正确的表达式是:

*(*(pa+8)+1) 和 *(*(*(ppa+2)+2)+1)

其中,pa 是指向 a[1][0] 的指针,因此 *(pa+8) 将指向 a[3][2]。然后,对于指针 *(pa+8),加 1 将指向 a[3][2][1],因此 *(*(pa+8)+1) 将返回 'x'。

ppa 是指向 a[1] 的指针,因此 *(ppa+2) 将指向 a[3]。然后,对于指针 *(ppa+2),加 2 将指向 a[3][2],因此 *(*(*(ppa+2)+2)+1) 将返回 'x'。

再次感谢您的纠正。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-26 15:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表