C++ 允许访问超出范围的数组下标

C++ 允许访问超出范围的数组下标,c++,multidimensional-array,C++,Multidimensional Array,考虑一下这个定义 int a[3][3] = {0}; 这里我有9个分配的连续内存空间,总大小为3*3*sizeof(int) 为数组存储的字节数。现在我有了这个任务 a[0][12] = 3; 读了这篇文章后,我明白了我是在从基地址访问a[12]地址。 但现在我的问题是如何a[0][12]数组下标能够访问超出a指定范围的值?这是未定义的行为,因为您正在从某个内存块访问内存 所以它很可能会返回你记忆中这个位置的内容,但它是未定义的 或者如果你把一些东西分配给内存位置,你就破坏了你自己

考虑一下这个定义

int a[3][3] = {0};  
这里我有9个分配的连续内存空间,总大小为3*3*
sizeof(int)

为数组存储的字节数。现在我有了这个任务

a[0][12] = 3;  
读了这篇文章后,我明白了我是在从基地址访问
a[12]
地址。

但现在我的问题是如何
a[0][12]
数组下标能够访问超出
a
指定范围的值?

这是未定义的行为,因为您正在从某个内存块访问内存

所以它很可能会返回你记忆中这个位置的内容,但它是未定义的

<>或者如果你把一些东西分配给内存位置,你就破坏了你自己的记忆,如果它工作的话会导致各种各样的问题。

与C++相关的不仅让你“在脚上开枪”,而且还把你的枪递给你。范围检查(数组索引的范围检查)属于“不要为不需要的东西付费”的指导原则,因此不提供范围检查。