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需要再上一层。它起作用了!谢谢