我正在学习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
答案 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
)