数组在c ++中是否具有常量大小

时间:2016-05-07 09:32:50

标签: c++

我了解到数组的大小有一些常数值。例如;

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;
}

此代码效果很好。所以我很困惑。

4 个答案:

答案 0 :(得分:1)

数组 具有恒定大小!

您创建了一个4元素数组:

  • 第一个元素是git stash apply
  • 第二名是array[0]
  • 3rd is 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的索引。访问超出此范围的任何索引会给您带来意想不到的行为。