C++ 初始化未知大小的数组
是否可能有一个返回可变大小数组的函数?我的计划是将返回数组的大小作为数组的第一个成员(因此ret_val[0]=#ret_val中的成员)C++ 初始化未知大小的数组,c++,C++,是否可能有一个返回可变大小数组的函数?我的计划是将返回数组的大小作为数组的第一个成员(因此ret_val[0]=#ret_val中的成员) 然后,将数组初始化为该函数的返回值就成了问题int moves[]=target_function()不可能编译。您可以返回指针而不是数组: int* moves = target_function(); 但不要返回指向在堆栈上创建的对象的指针,因为当函数返回时,它将超出范围。您可以在堆上动态分配数组。这样的数组不能是自动变量。正如Mark所说,它需要是一
然后,将数组初始化为该函数的返回值就成了问题
int moves[]=target_function()
不可能编译。您可以返回指针而不是数组:
int* moves = target_function();
但不要返回指向在堆栈上创建的对象的指针,因为当函数返回时,它将超出范围。您可以在堆上动态分配数组。这样的数组不能是自动变量。正如Mark所说,它需要是一个指向动态创建的数组的指针。简而言之,您不能返回数组。您可以通过以下方式返回指向动态分配内存的指针:
int* moves = target_function();
// do stuff with moves
delete[] moves;
target_函数()
必须使用new
来分配内存
请注意,从内存管理的角度来看,这并不理想,因为很容易忘记对返回的数组调用
delete[]
。相反,考虑返回<代码> STD::向量< /代码>。 < P>我建议不要使用这样的黑客。有std::vector可供您使用。如果您真的想这样做,下面的代码可以满足您的要求:
int *allocate(int size)
{
int *res = new int[size];
res[0] = size;
return res;
}
// Prints "Yes, it's 42":
int *myArray = allocate(42);
if (myArray[0] == 42)
std::cout << "Yes, it's 42!" << std::endl;
int*分配(int大小)
{
int*res=新的int[size];
res[0]=大小;
返回res;
}
//打印“是的,是42”:
int*myArray=allocate(42);
if(myArray[0]==42)
std::cout通常您会使用指向动态分配数组的指针:
int* target_function() {
int result* = new int[123];
result[0] = 123;
return result;
}
int *moves = target_function();
std::cout << moves[0] << " moves" << std::endl;
int*目标函数(){
整数结果*=新整数[123];
结果[0]=123;
返回结果;
}
int*moves=target_函数();
std::cout每个人都在告诉你使用向量,但没有人告诉你如何使用向量。以下是方法:
#include <vector>
std::vector<int> target_function(int size)
{
std::vector<int> v(size);
v[0] = size;
return v;
}
int main()
{
std::vector<int> moves = target_function( my_favorite_int );
}
#包括
std::向量目标函数(int size)
{
标准:向量v(大小);
v[0]=尺寸;
返回v;
}
int main()
{
std::vector moves=目标函数(my_favorite_int);
}
为什么不使用<代码> STD::vector < /代码>?同意,使用一个STD::vector——这就是它的作用。C++中数组变量的大小必须在编译时知道。堆栈上的数组无法从运行时变量大小的内容初始化。肯尼是对的,这就是向量的作用。任何方法都可以解决这个问题。对不起,I-1的错误做法。函数应该返回一个std::vector
。谢谢你,+1只是建议了一个vector,而不是这个绕圈子的废话。说“代码在这里。哦,顺便说一句,那是糟糕的代码,不要使用它”有什么意义?更多的是一个评论而不是一个答案。