c++ - 为什么 OutOfRange 数组索引仍然打印一个值?

标签 c++ arrays

<分区>

我一直在研究 C++ 中的数组,我注意到如果我告诉程序从索引中打印一个技术上应该超出范围的值,程序仍然能够找到它的值。这是怎么发生的?

代码:

#include <iostream>

using namespace std;

int main(void)
{
    int x = 0;
    int array[5][5];
    for (int row = 0; row < 5; row++) {
        cout << "OutOfRange array index [0][8]: " << array[0][8] << endl;
        cout << "OutOfRange array index [2][8]: " << array[2][8] << endl;
        cout << "OutOfRange array index [8][8]: " << array[8][8] << endl;
        cout << "OutOfRange array index [88][88]: " << array[88][88] << endl;
        cout << "OutOfRange array index [90][90]: " << array[93][93] << endl;
        for (int col = 0; col < 5; col++) {
            array[row][col] = x;
            x++;
            cout << array[row][col] << " ";
        }
        cout << endl;
    }
    return 0;
}

对于某些索引,它返回一个非常高的值,我假设它是一个内存地址,但对于其他索引,它似乎能够找到一些值(或者可能只是一个巧合,内存地址低到足以让我认为它一个值?)。

OutOfRange array index [0][8]: 0
OutOfRange array index [2][8]: 17
OutOfRange array index [8][8]: 0
OutOfRange array index [88][88]: 0
OutOfRange array index [90][90]: 152176
0 1 2 3 4 
OutOfRange array index [0][8]: 0
OutOfRange array index [2][8]: 17
OutOfRange array index [8][8]: 2104726264
OutOfRange array index [88][88]: 0
OutOfRange array index [90][90]: 152176
5 6 7 8 9 
OutOfRange array index [0][8]: 8
OutOfRange array index [2][8]: 17
OutOfRange array index [8][8]: 2104726264
OutOfRange array index [88][88]: 0
OutOfRange array index [90][90]: 152176
10 11 12 13 14 
OutOfRange array index [0][8]: 8
OutOfRange array index [2][8]: 17
OutOfRange array index [8][8]: 2104726264
OutOfRange array index [88][88]: 0
OutOfRange array index [90][90]: 152176
15 16 17 18 19 
OutOfRange array index [0][8]: 8
OutOfRange array index [2][8]: 18
OutOfRange array index [8][8]: 2104726264
OutOfRange array index [88][88]: 0
OutOfRange array index [90][90]: 152176
20 21 22 23 24 
Program ended with exit code: 0

[2][8] 索引对我来说也很有趣。为什么它在 outer for 循环的最后一次运行期间将其值从 17 更改为 18

最佳答案

C++ 中没有数组绑定(bind)检查。您正在做的是从堆栈中读取一些垃圾值。这样做是未定义的行为。

关于c++ - 为什么 OutOfRange 数组索引仍然打印一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20874919/

相关文章:

ruby - 除了数组值之外,如何使用散列?或者如何创建哈希线?

c++ - 在二进制表示法中,小数点 "."之后的数字是什么意思?

c++ - Qt: QHostAddress: 没有这样的文件或目录

c++ - 什么时候用 Qt 在 opengl 中创建渲染上下文?

c++ - 在 C++ 中仅获取属于组 "2"的 MQ9 消息

python - 如何从元素列表开始进行回归

c++ - Runge-Kutta 四阶粒子平流代码示例

php - 如何使用 PHP 从距离矩阵中获取聚类?

arrays - 持有排序数组-反向排序输入情况

php - 在 php 中使用变量作为键名