C++使用指针创建数组

C++ Creating an Array using Pointers

本文关键字:创建 数组 指针 C++      更新时间:2023-10-16

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

int arrayTemp[n];

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

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

int * arrayTemp = new int[n];

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

您不能这样做:

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 int动态创建存储,并且由于这是在堆上动态创建的,因此它在返回后将保持不变(如果是malloc ed,则需要为free d;如果是用new创建的数组,则需要delete[] d。对于用new创建的单个对象,您只需使用delete(