C++ 如何创建一个void数组,其大小将由用户从命令行输入指定?

C++ 如何创建一个void数组,其大小将由用户从命令行输入指定?,c++,arrays,visual-studio-2013,command-line,C++,Arrays,Visual Studio 2013,Command Line,我想让用户输入一个整数来创建一个二维数组,如下所示: void*myArray_1[2][userInput] 这是编译器不允许的,因为userInput不是常量 然后我试了一下: void** myArray_2 = new void*[rowCount]; for(int i = 0; i < rowCount; ++i) myArray_2[i] = new void[colCount]; 我得到了正确的结果。现在,我唯一想做的是允许用户指定第二个维度的大小,而不是10。根

我想让用户输入一个整数来创建一个二维数组,如下所示:

void*myArray_1[2][userInput]

这是编译器不允许的,因为
userInput
不是常量

然后我试了一下:

void** myArray_2 = new void*[rowCount];
for(int i = 0; i < rowCount; ++i)
    myArray_2[i] = new void[colCount];

我得到了正确的结果。现在,我唯一想做的是允许用户指定第二个维度的大小,而不是10。

根据Igor Tandetnik的评论,如果您知道外部大小是常量2,您可以执行以下操作:

std::vector<void*> myArray[2] = {
  std::vector<void*>(userInput), std::vector<void*>(userInput)
};

for (int i = 0; i < userInput; ++i) {
  work on myArray[0][i]...
  work on myArray[1][i]...
}
std::vector myArray[2]={
std::vector(用户输入),std::vector(用户输入)
};
对于(int i=0;i
根据Igor Tandetnik的评论,假设您知道外部尺寸为常数2,您可以执行以下操作:

std::vector<void*> myArray[2] = {
  std::vector<void*>(userInput), std::vector<void*>(userInput)
};

for (int i = 0; i < userInput; ++i) {
  work on myArray[0][i]...
  work on myArray[1][i]...
}
std::vector myArray[2]={
std::vector(用户输入),std::vector(用户输入)
};
对于(int i=0;i
显然,您需要一个
void*
数组。这与
void
的二维数组不同,因为您无法在错误状态下分配
void
数组。第一级是正确的:

void** myArray_2 = new void*[rowCount];
但是,必须为第二个级别分配有效类型,例如

void** myArray_2 = new void*[rowCount];
for(int i = 0; i < rowCount; ++i)
    myArray_2[i] = new int[colCount];
void**myArray_2=新的void*[rowCount];
对于(int i=0;i

当然,除了
int
之外,您还可以输入任何您想要的类型。如果需要,您还可以混合类型。

显然,您需要一个
void*
数组。这与
void
的二维数组不同,因为您无法在错误状态下分配
void
数组。第一级是正确的:

void** myArray_2 = new void*[rowCount];
但是,必须为第二个级别分配有效类型,例如

void** myArray_2 = new void*[rowCount];
for(int i = 0; i < rowCount; ++i)
    myArray_2[i] = new int[colCount];
void**myArray_2=新的void*[rowCount];
对于(int i=0;i

当然,除了
int
之外,您还可以输入任何您想要的类型。如果需要,也可以混合类型。

致命点不是传球、定点或任何类似的动作,问题在于:

myArray_2[i] = new void[colCount];
newvoid[colCount]
表示“为我创建一个
void
数组”
void
是“无类型”的占位符,无法实例化。实际上,您将创建一个空数组。没有什么是没有定义的。没有尺码。这是不可能做到的

然而,OP希望复制该文件

为此,OP需要进一步间接一级,并存储
void*
的二维数组(实际上是数组数组数组)

void*** myArray_2 = new void**[rowCount];
for(int i = 0; i < rowCount; ++i)
    myArray_2[i] = new void*[colCount];

定义一个
向量
,该向量包含一个
向量
,该向量包含指向
void
的指针。外部
向量
被预先指定为2个元素,内部向量被预先指定为
用户输入
元素。

杀死点不是传球、定点或任何类似的,问题在于:

myArray_2[i] = new void[colCount];
newvoid[colCount]
表示“为我创建一个
void
数组”
void
是“无类型”的占位符,无法实例化。实际上,您将创建一个空数组。没有什么是没有定义的。没有尺码。这是不可能做到的

然而,OP希望复制该文件

为此,OP需要进一步间接一级,并存储
void*
的二维数组(实际上是数组数组数组)

void*** myArray_2 = new void**[rowCount];
for(int i = 0; i < rowCount; ++i)
    myArray_2[i] = new void*[colCount];

定义一个
向量
,该向量包含一个
向量
,该向量包含指向
void
的指针。外部
向量
被预先指定为2个元素,内部向量被预先指定为
用户输入
元素。

在一个空数组中,您希望放置什么?错误信息非常清楚,这种事情是不允许的。动态大小甚至不重要。
std::vector myVector(2,std::vector(userInput))
也许你想要一个2D数组的
void*
void***myArray…
?@code学徒我想把它传递给一个接受2D数组的函数。是的,我想要一个2D数组
void*
@GmtK:你才是困惑的人。任何函数都不能接受二维void数组。(至少,不是在C++中)。向我们展示函数的实际签名。您希望在一个void数组中放置什么?错误信息非常清楚,这种事情是不允许的。动态大小甚至不重要。
std::vector myVector(2,std::vector(userInput))
也许你想要一个2D数组的
void*
void***myArray…
?@code学徒我想把它传递给一个接受2D数组的函数。是的,我想要一个2D数组
void*
@GmtK:你才是困惑的人。任何函数都不能接受二维void数组。(至少,不是在C++中)。向我们展示函数的实际签名。金句:OP需要进一步间接一级。它起作用了!谢谢。金句:OP需要再上一层。它起作用了!谢谢