【发布时间】:2021-02-08 07:07:41
【问题描述】:
我是 C++ 的初学者,我看到了 here 的帖子。但是,我不清楚动态数组有什么好处。
一个好处是可以改变动态数组的长度,这里是代码
int *p = new int[10];
// when run out of the memory, we can resize
int *temp = new int[20];
copy(p, temp); // copy every element from p to temp
delete[] p; // delete the old array
p = temp;
temp = nullptr;
以上是动态分配,表示数组会在堆上,需要手动删除。但是,为什么不使用静态数组如下
int array1[10];
int *p = array1;
// when run out of the memory, we can resize
int array2[20];
copy(array1, array2); // copy every elements from array1 to array2;
p = array2;
在这段代码中,我们不需要删除array1,因为它在堆栈区。这是我的问题:
动态数组有什么好处?在我看来,调整大小不是一个大问题。人们总是说静态数组的大小是固定的,动态数组的大小是不固定的。为什么动态数组的大小不固定。比如int p=new int[10],p的大小是固定的。
非常感谢。
【问题讨论】:
-
你知道变量的作用域,变量的生命周期吗?
-
@S.M.不是真的,这意味着如果静态数组在范围内,它将浪费内存。而动态数组在程序中删除会更加灵活?
-
您提到的帖子是指堆栈和堆。所以尝试声明非全局
int array[SOME_LARGE_NUMBER],如果你没有修改堆栈大小,这可能会失败。 -
谢谢,我新建一个数组怎么样,先
int array[LEN1],然后替换成int array[LEN2]。