我必须编写一个程序,其中我使用动态数组:
int size=1;
double* dyn_arr = new double[size];
int n=0;
double sum=0.0;
while(std::cin >> dyn_arr[n]){
sum = sum + dyn_arr[n++];
if(n==size){
size*=2;
double* new_array = new double[size];
std::copy(dyn_arr, dyn_arr + n, new_array);
delete[] dyn_arr;
dyn_arr = new_array;
}
}
我无法理解 delete[] dyn_arr
之后的部分 dyn_arr = new_array
。
dyn_arr
是数组 dyn_arr
的第一个元素的指针,不是吗?我如何删除指针/数组并再次写入 dyn_arr = new_array
?
最佳答案
dyn_arr
变量是一个“ double 指针”类型的变量。这意味着它保存着 double 的地址,您可以随时更改它指向的 double 。
double* dyn_arr = new double[size];
现在,dyn_arr
指向第一个 size
double 。
double* new_array = new double[size];
这将创建一个“ double 指针”类型的新变量,指向新 double 组的第一个。
delete[] dyn_arr;
这会删除 dyn_arr
指向的 double 组。因为我们从 new[]
得到了 dyn_arr
的值,所以我们可以在处理完数组后将它传递给 delete[]
。所以现在 dyn_arr
指向垃圾,我们不能使用它的值。
dyn_arr = new_array;
这会更改 dyn_arr
的值,使其指向我们分配的新 double 集。由于 dyn_arr
是一个指针类型的变量,我们可以随时更改它以指向不同的东西。
关于c++ - 删除动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37182040/