动态数组和静态数组编译时间或运行时?

时间:2017-11-08 14:37:07

标签: c++ arrays variable-length-array

我理解静态数组和动态数组的基本概念。这两者之间的主要区别是一个(静态数组)在编译时分配内存,另一个在运行时分配内存。但是,我们可以创建静态数组,其大小将是用户输入的值。

int value ;
cin >> value  ;

int array [value] ;
int i = 0 ;
while(i < value)
{
    cin >> array[i] ;
    i ++ ; 
}

因此程序在运行时之前不知道该数组的大小。 那么,如果静态数组也可以在运行时分配空间,那么静态和动态数组之间的实际根本区别是什么呢?

另外,谈论阵列的可恢复性。要扩展动态数组,我们可以在将其复制到新的双倍大小的动态数组后删除前一个数组。我们也可以使用Static Arrays做同样的事情吗? [但是,在这种情况下无法删除原始数组,并使用冗余堆栈空间。这是S.Array和D.Array之间的唯一区别吗]

2 个答案:

答案 0 :(得分:0)

有编译器扩展名为&#34;可变长度数组&#34;作为C99标准的一部分,允许这一声明。

作为C ++语言的一部分,C99标准不受官方支持。

上面的代码在MSVS(Microsoft Visual Studio)中不起作用,因为它不支持C99,但将由gccclang成功编译

答案 1 :(得分:0)

静态数组存储在堆栈中,但动态数组存储在堆上。当某些东西存储在堆栈中时,一旦它超出范围,就会被处理掉。例如,int,chars等。但是,如果它是在堆上创建的,则必须确保垃圾收集在超出范围时完成其工作。如果您没有正确清理和取消分配内存,则可能会导致内存泄漏。