想请教友友一个小小的问题
char a = {{
{'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) = &a;
char (*ppa) = &a;
//想要通过指针 pa 和 ppa 访问数组 a 中的 'x' 元素,请问表达式应该怎么写?
//答:*(*(pa+8)+1) 和 *(*(*(ppa+2)+2)+1))。
//这个答案不应该指向'r', 本帖最后由 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 ,因此我们需要从 a 移动到 a 的位置。
· 由于 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 ,因此我们需要从 a 移动到 a 的位置。我们只需要将 ppa 指针移动2个位置,即 ppa + 2 。
· 然后,我们需要访问第三个子数组(即 a ),所以我们需要在上一步的基础上再加2,即 *(ppa + 2) + 2 。
· 接下来,我们需要访问第二个元素(即'x'),因此我们需要在上一步的基础上再加1,即 *(*(ppa + 2) + 2) + 1 。
· 最后,我们需要解引用指针,得到 *(*(*(ppa + 2) + 2) + 1) 。
非常感谢您指出错误。您是正确的,答案不应该指向 'r',而应该指向 'x'。因此,正确的表达式是:
*(*(pa+8)+1) 和 *(*(*(ppa+2)+2)+1)
其中,pa 是指向 a 的指针,因此 *(pa+8) 将指向 a。然后,对于指针 *(pa+8),加 1 将指向 a,因此 *(*(pa+8)+1) 将返回 'x'。
ppa 是指向 a 的指针,因此 *(ppa+2) 将指向 a。然后,对于指针 *(ppa+2),加 2 将指向 a,因此 *(*(*(ppa+2)+2)+1) 将返回 'x'。
再次感谢您的纠正。
页:
[1]