gpt4 book ai didi

C++ 负数组索引

转载 作者:行者123 更新时间:2023-12-03 06:55:53 27 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Accessing an array out of bounds gives no error, why?

(18 个回答)


4年前关闭。




我分配了一个包含 3 个元素的 int 数组,并想到了下面的代码:

int a[3];
for(int i = -2; i < 3; ++i){
a[i] = i;
cout<<a[i]<<" ";
}

这是它的输出:

-2 -1 0 1 2 

似乎数组 a 有 5 个分配的空间,而 a 位于这些空间的中间。
有任何想法吗?

最佳答案

要解释负索引的工作原理,您首先必须了解(或记住)对于任何数组或指针 a和索引i , 表达式 a[i]等于 *(a + i) .
这意味着您可以拥有一个指向数组中间元素的指针,并将其与正或负索引一起使用,这是简单的算术。
例子:

int a[3] = { 1, 2, 3 };
int* p = &a[1]; // Make p point to the second element

std::cout << p[-1]; // Prints the first element of a, equal to *(p - 1)
std::cout << p[ 0]; // Prints the second element of a, equal to *p
std::cout << p[ 1]; // Prints the third element of a, equal to *(p + 1)
从图形上可以看出
+------+------+------+
| [0] | [1] | [2] |
+------+------+------+
^ ^ ^
| | |
p-1 p p+1

现在在数组中使用负索引时,如 a 的示例中在问题中,它将是这样的:
+-----+-------+-------+------+------+------+
| ... | [-2] | [-1] | [0] | [1] | [2] |
+-----+-------+-------+------+------+------+

也就是说,这里的负索引将超出数组的范围,并会导致未定义的行为。

关于C++ 负数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47170740/

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