0

我目前正在学习 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

4

2 回答 2

4
int arrayTemp[n];

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

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

int * arrayTemp = new int[n];

注意:您必须删除它以避免内存泄漏。

于 2013-03-14T05:14:00.450 回答
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 or C++) 或(C++) 为 10 个整数动态创建存储,并且由于这是在堆上动态创建的,因此它会在返回后持续存在(如果ednew则需要d 或d 如果它是一个用 . 制作的数组。对于用你制作的单个对象,只需使用)freemallocdelete[]newnewdelete

于 2013-03-14T05:14:55.843 回答