<分区>
我一直在研究 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
?