分配特定大小的数组与在cpp函数中声明特定大小的数组有什么区别?

时间:2017-10-30 10:45:51

标签: c++ arrays

通常,函数中数组的作用域以它结尾。但如果我事先分配,那么它完全返回数组。那么分配数组或声明数组之间的区别是什么? 我正在编写代码和我感到困惑的地方。是因为第一个声明的动态内存分配还是别的。有人可以详细说明吗?

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

1 个答案:

答案 0 :(得分:0)

在第二种情况下,数组在函数的堆中创建,因此当您退出函数时,该数组不再存在。 在第一种情况下,您需要保留内存空间来放置数组,因此不是函数本身的本地空间,您必须处理它的销毁