Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 初始化未知大小的数组_C++ - Fatal编程技术网

C++ 初始化未知大小的数组

C++ 初始化未知大小的数组,c++,C++,是否可能有一个返回可变大小数组的函数?我的计划是将返回数组的大小作为数组的第一个成员(因此ret_val[0]=#ret_val中的成员) 然后,将数组初始化为该函数的返回值就成了问题int moves[]=target_function()不可能编译。您可以返回指针而不是数组: int* moves = target_function(); 但不要返回指向在堆栈上创建的对象的指针,因为当函数返回时,它将超出范围。您可以在堆上动态分配数组。这样的数组不能是自动变量。正如Mark所说,它需要是一

是否可能有一个返回可变大小数组的函数?我的计划是将返回数组的大小作为数组的第一个成员(因此ret_val[0]=#ret_val中的成员)


然后,将数组初始化为该函数的返回值就成了问题
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,而不是这个绕圈子的废话。说“代码在这里。哦,顺便说一句,那是糟糕的代码,不要使用它”有什么意义?更多的是一个评论而不是一个答案。