这是我的代码
double hour_payload_add(int entries , double array[])
{
int index=0 ,k=0;
int totalpayload=0;
double returnarray[entries/120];
while(k< entries)
{
totalpayload = totalpayload + array[k];
if(k%120==0)
{
returnarray[index] = totalpayload;
index++;
totalpayload=0;
}
}
return returnarray;
}
这里我称之为
double hourgraph[hrentries];
hourgraph= hour_payload_add(entries , graph);
因为我想返回一个数组,我该怎么做才能返回而不使用指针?
答案 0 :(得分:7)
将数组按引用传递给函数,不要返回任何内容。小例子:
void hour_payload_add(int entries , double array[], double (&returnArray)[SIZE])
{
// returnArray will be updated as it's external to function.
}
或
void hour_payload_add(int entries , double array[], double *returnArray) // <-- pointer
{
// returnArray will be updated as it's external to function.
}
用法:
double returnArray[SIZE];
hour_payload_add(entries, array, returnArray);
答案 1 :(得分:4)
改变了两行:
std::vector<double> hour_payload_add(int entries , std::vector<double> array) // HERE
{
int index=0 ,k=0;
int totalpayload=0;
std::vector<double> returnarray(entries/120); // HERE
/// ....
return returnarray;
}
好的,可以在顶部添加一个
#include <vector>
要获得全额奖金,我建议更改一下:
std::vector<double> hourgraph(hrentries);
hourgraph = hour_payload_add(graph);
// ...
std::vector<double> hour_payload_add(std::vector<double> array)
{
const size_t entries = array.size();
答案 2 :(得分:1)
你不能在C ++中返回数组 - 你宁愿返回指向一块内存的指针。
此外,您不能返回指向堆栈上本地声明的数组的指针,因为堆栈在函数终止后立即恢复。您必须使用new
或malloc
动态分配它,并返回指向其开头的指针。
答案 3 :(得分:1)
为此,您应该使用指针并在填充之前创建数组(而不是在填充它的函数中)。
double* hour_payload_add(int entries , double array[])
但是我更喜欢将数组作为参考传递。
void hour_payload_add(int entries , double array[], double& ret_array[])
甚至更好(正如其他人所说)将使用矢量。
void hour_payload_add(std::vector<double>array, std::vector<double>& ret_array)
答案 4 :(得分:1)
您必须使用new创建阵列。所以你的功能应该是这样的:
double* hour_payload_add(int entries , double array[])
{
int index=0 ,k=0;
int totalpayload=0;
double* returnarray = new double[entries/120];
while(k< entries)
{
totalpayload = totalpayload + array[k];
if(k%120==0)
{
returnarray[index] = totalpayload;
index++;
totalpayload=0;
}
}
return returnarray;
}
使用数组后,必须通过调用数组上的delete []来释放空间,以避免内存泄漏:
int entries = 5;
double* array = hour_payload_add(entries);
for (int i=0; i < entries; i++)
{
std::cout << array[i] << std::endl;
}
delete[] array;
答案 5 :(得分:1)
一般情况下,你不应该在C ++中使用数组,而是更喜欢使用STL容器类(std::vector
是这些中最像数组的)。当然也有例外,在某些情况下你应该使用一个数组(从不说永远不会),但在你的例子中,我建议改为使用vector
。
Sehe的回答提供了使用std::vector
并使用数组大小初始化它的示例:
std::vector<double> returnarray(entries/120);
这使用一个构造函数来设置数组的默认大小。更有用的是,矢量可以动态地改变大小,并且您可以按照建议从函数返回它。根据编译器完成的优化,它甚至可能不会创建向量的副本 - 但这取决于编译器。
我的建议是查看vector和其他容器上的文档,而不是数组。
答案 6 :(得分:0)
您无法从C ++中的函数返回c样式数组。但是,您可以从函数
返回std::array
容器
您可以返回在函数内部本地创建的c样式数组的起始地址,但是当函数返回时,该数组将被清除,并且您将指向不是您想要的指针。
您必须使用new
动态分配数组,然后返回指向它的指针。