我了解到数组的大小有一些常数值。例如;
int array[5]; //This array have only 5 index that can be usable
这就是我所学到的。
但是,当我尝试这个代码时,它与这个假设并不相符。
#include <iostream>
using namespace std;
int main()
{
int array[4];
array[5]=6;
cout<<array[5]<<endl;
return 0;
}
此代码效果很好。所以我很困惑。
答案 0 :(得分:1)
数组 具有恒定大小!
您创建了一个4元素数组:
git stash apply
array[0]
array[1]
C ++是一种不安全的语言。如果您执行array[2]
甚至array[5]
之类的操作,您最终会访问一堆随机数据!这称为未定义行为。当你调用未定义的行为时,C ++可以随心所欲地做任何事情。你的程序可以在这里运行得很好但是撞到别人的电脑上。编译器不会检查以确保任何索引首先有效。这个 nothing 与具有或不具有恒定大小的数组有关。
答案 1 :(得分:0)
未定义的行为就是答案。
C ++没有运行时检查绑定。所以在你的情况下它可以工作,但你不使用数组空间。 在其他情况下,您将获得例外。 此外,在其他情况下,您可以使用数组[10],但您正在使用操作系统为程序提供的其他空间。
答案 2 :(得分:0)
它可以工作,因为存在到达数组变量末尾后的内存。问题是此数组未保留。这意味着数组[5]将指向一个内存磁贴,但您无法确定它对它的期望。它可能是其他变量,可能由另一个程序保留。如果您设法编辑它(就像您一样),当其他变量或程序保留此内存位置时,问题就会出现。然后你的数组[5]将不再保持值6,但它会改变(甚至可能无法从你的工作代码中获取)。
答案 3 :(得分:0)
声明类似int ar [n]的数组允许您使用从0到n-1的索引。访问超出此范围的任何索引会给您带来意想不到的行为。