C 与数组的负索引不一致的结果

标签 c arrays

<分区>

我有两个数组,我必须从这两个数组中获取特定索引的值。在这样做时,我遇到了一些奇怪的事情。当我打印出 arr1 的索引 -1 处的值时,我得到 0 并且索引 8 发生了同样的事情。我得出结论,数组范围之外的 inidces 返回为 0。现在我的问题。当我对 arr2 做同样的事情时,我得到 29 作为索引 -1 的值。
我做错了什么?

int arr1[] = {33, 12, 75, 85, 62, 14, 100, 29};

printf("Nummer -1: %d\n",arr1[-1]); //outputs 0
printf("Nummer 8: %d\n",arr1[8]; //outputs 0


int arr2[] = {85, 15, 84, 96, 4, 45, 55, 12, 25, 68};
printf("Nummer -1: %d\n",arr2[-1]); //outputs 29

注意:我在 Linux Mint 上使用 Code:Blocks 和 gcc 编译器

最佳答案

I concluded that indices outside the range of an array are returned as 0.

这是一个错误的结论:访问数组范围之外的索引会产生未定义的行为。访问也可能产生任意值,但它也可能使您的程序崩溃:一旦调用未定义的行为,程序就处于无效状态。

When I do the same thing with arr2, I get 29 as the Value of index -1.

在这种特殊情况下,您的程序似乎从不同的数组中读取一个值(即 arr1 中的最后一个值)。不过,这仍然是未定义的行为,因此这样做会导致程序无效。

关于C 与数组的负索引不一致的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47365834/

相关文章:

c - 将 isdigit 与 if 一起使用

c - LinkedList 堆栈损坏

arrays - 如何将复合类型的数组从 nodejs 传递到 postgresql 函数?

javascript - ES6获取数组中的嵌套对象

c++ - 使用 Boost 和 IOStreams 序列化为静态数据

c++ - 如何通过 C++ 找出当前用户属于哪个组?

c - 使用前向声明解决循环依赖

类中的 C++ 2d "dynamic"数组?

arrays - 获取嵌套数组中具有特定ObjectId的数组对象

Android:打开相机并获取C级别的原始数据