通常,函数中数组的作用域以它结尾。但如果我事先分配,那么它完全返回数组。那么分配数组或声明数组之间的区别是什么? 我正在编写代码和我感到困惑的地方。是因为第一个声明的动态内存分配还是别的。有人可以详细说明吗?
#include <bits/stdc++.h>
#define N 10
using namespace std;
int * get_array() {
int * p = new int[N];
//|--- by declaring like this, the array was perfectly returned.
int p[N];
//|--- but is case of this declaration the array returned showed garbage value in the main function.
for(int i = 0; i < N; ++i) p[i] = i;
return p;
}
int main(int argc, char const *argv[])
{
int * M = get_array();
for (int i = 0; i < N; ++i) {
cout << M[i] << endl;
}
return 0;
}
答案 0 :(得分:0)
在第二种情况下,数组在函数的堆中创建,因此当您退出函数时,该数组不再存在。 在第一种情况下,您需要保留内存空间来放置数组,因此不是函数本身的本地空间,您必须处理它的销毁