这是我的简单代码 arrayfunc()应该在数组中存储一些数字,并返回该数组的指针 到将打印数组内容的main函数 我的代码有什么问题? 它只返回指向数组第一个元素的指针 任何帮助将不胜感激。 提前谢谢。
#include <iostream>
using namespace std;
//The definition of the function should remain the same
int* arrayfunc()
{
int *array[10];
array[0] =new int;
array[1] =new int;
array[2] =new int;
array[3] =new int;
*array[0]=10;
*array[1]=11;
*array[2]=12;
*array[3]=13;
return *array;
}
int main()
{
for(int i=0;i<4;i++)
cout<<*(arrayfunc()+i)<<endl;
return 0;
}
答案 0 :(得分:3)
(1)如果你想要返回它,你应该用new
分配你的数组:int* array = new int[10];
[假设你在这里需要int
的数组,而不是int*
的数组}的]
(2)返回指向数组中第一个元素的指针,使用return array
而不是return *array
(3)你的数组是指针数组,而不是整数数组。
答案 1 :(得分:1)
你的数组是在堆栈上分配的,所以只要函数返回,它就会被释放。所以你想要一个指向死记忆的指针。
但是你没有这样做,你只是返回第0个数组项的有效(副本)值。
那么,你需要做什么:
编辑:
基本上你想要以下内容:
using namespace std;
vector<int> arrayfunc()
{
vector<int> v;
v.push_back(10);
...
return v;
}
...
vector<int> result = arrayfunc();
cout << result[0] << ...
这将是正确的C ++方式。
(挑剔:)由于所有现代C ++编译器都使用了RVO,因此您无需关心复制向量。
在堆上分配数组也应该很简单:
int* array = new int[4];
array[0] = 10;
...
return array;
...
int* array = arrayfunc();
...
delete[] array;
但我强烈建议采用前一种方法(使用矢量)。
答案 2 :(得分:0)
这个代码对我来说在几个层面上都是错误的。
永远不要返回函数的内部变量。变量数组仅在函数中定义,因此不应将其返回到外部。
为什么要用new分配每个int?我会立刻分配整个数组。如果您知道数组长度并且它是常量,请考虑静态定义。
答案 3 :(得分:0)
答案 4 :(得分:0)
只需尝试return array;
而不是return *array;