gpt4 book ai didi

c - 在 C 语言中,是否可以使用位于已知位置的指针来遍历数组?

转载 作者:行者123 更新时间:2023-11-30 14:41:11 25 4
gpt4 key购买 nike

我的问题需要一些解释:

首先,让我们考虑一个大小为 n 的一维数组(动态或静态)。我们称之为选项卡。

我们将通过假设数组存储在内存中从地址 0x01 到 (0x01 + n - 1) 来简化。

现在考虑一个名为 p 的指针。以及起始索引 i,介于 0 和 n - 1 之间。

然后我们这样做:

p = &tab[i];

p 已经知道地址 0x0i 的值。 (符号不正确,但你明白了)。

我们可以像这样使用 p 读取 tab[i - 1]tab[i + 1] 吗?

int iprev = *(p - 1);
int inext = *(p + 1);

或者只是像这样?

int iprev = p[-1];
int inext = p[1];

最终会这样做吗?

p--;
p++;

如果一维数组可以做到这一点,那么多维数组也可以吗?以及如何用C实现它?

最佳答案

只要p + i(对于任何i,正数或负数)在任何方向上都没有超出界限(即,在您的示例中,它没有指向 tab[0] 之前或 tab[n - 1] 之后),那么就可以了。

请记住,对于任何指针或数组p和索引i,表达式*(p + i) 完全等于p[i]

<小时/>

更准确地说,可以有一个指向任何地方的指针,只要在取消引用该指针时它指向有效的内存即可。

示例:

int tab[N];  // Exact value of N is irrelevant
int *p = tab; // Equal to p = &tab[0]

p--; // After this, p will be pointing out of bounds, this is okay

// Comparing pointers is okay
if (p < tab)
{
/* ... */
}

printf("Value of *p = %d\n", *p); // ERROR: Here you dereference the ouf-of-bounds pointer

关于c - 在 C 语言中,是否可以使用位于已知位置的指针来遍历数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55085414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com