C ++使用指针创建数组

时间:2013-03-14 05:08:20

标签: c++ arrays pointers

我正在学习C ++,很抱歉,如果我看起来有点傻。

我当前的练习,我坚持,要求我编写一个函数,IndexArray(int n),它返回一个指向动态分配的整数数组的指针,该数组包含n个元素,每个元素都初始化为自己的索引。 (从工作表中复制)。

我已多次阅读此内容并且并未完全理解,但他们举了一个例子:

假设intPtr被声明为

int *intPtr;

声明

intPtr = IndexArray(10);

应该产生以下内存配置:

intPtr ->  0 1 2 3 4 5 6 7 8 9

从这个例子中我猜测我的函数需要创建一个大小为n的数组,其值从0到n-1,然后另一个指针需要指向该数组。

这是他们的测试代码:

int *values1;
values1 = IndexArray(10);

我知道如何轻松创建数组,但我还没有完全理解指针,知道该怎么做。我认为返回一个数组会起作用:

int *IndexArray(int n) {
    cout << n << endl;
    int arrayTemp[n];
    for(int i = 0; i < n; i++) {
        arrayTemp[i] = i;
    }
    return arrayTemp;
}

但是在测试时,values1数组不包含0-9之间的值(尽管arrayTemp在返回之前就是这样)。

任何帮助都会令人惊叹,希望我能提供你需要帮助的一切。谢谢! :d

2 个答案:

答案 0 :(得分:3)

int arrayTemp[n];

请注意,该语句位于一个函数中,因此当函数终止时,arrayTemp []将不再可用,它将被删除:它是一个#local#variable!

所以,如果你想这样做,你可以使用:

int * arrayTemp = new int[n];

注意:您必须删除任何如何避免内存泄漏。

答案 1 :(得分:2)

你不能这样做:

int *IndexArray(int n) {
    cout << n << endl;
    int arrayTemp[n]; //declare a local array
    for(int i = 0; i < n; i++) {
        arrayTemp[i] = i;
    }
    return arrayTemp; //return a pointer to a local
}

您无法返回指向本地的指针。一旦你回来,当地就不复存在了。指针现在指向垃圾。

相反,您必须使用malloc(C或C ++)或new(C ++)动态创建10个整数的存储,并且由于这是在堆上动态创建的,因此它将在返回后保留(如果是free,则需要malloc d;如果是使用delete[]制作的数组,则需要new。对于仅使用{{1}制作的单个对象你只需使用new