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

标签 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];

导致以下错误:

Error: array of void is NOT allowed.

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

编辑:
我的函数原型(prototype)是:
errorType EventGet (EVENT_HANDLE hEvent, void * pBuffer);

我用过这个:

void* myArray_3[2][10];
...
myArray_3[0][count++] = myOtherArray[0]; //myOtherArray[0] contains a handle and myOtherArray is an 1D array with size of 2.
EventGet ( myEventHandle, myArray_3[0][i]);

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

最佳答案

杀戮点不是传球、指向或任何类似的东西,问题就在这里:

myArray_2[i] = new void[colCount];

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

但是,OP 希望复制 Variable Length Array

void* myArray_1[2][userInput];

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

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

这将给出 void* myArray_1[2][userInput];

的外观

首选的 C++ 方法是使用容器为您和 use a std::vector 管理内存:

std::vector<std::vector<void*>> myVector_1(2, std::vector<void*>(userInput));

定义一个 vector,其中包含一个 vector,该 vector 包含指向 void 的指针。外部 vector 预先设置为 2 个元素,内部 vector 预先设置为 userInput 元素。

关于c++ - 如何创建一个 void 数组,其大小将由用户从命令行输入指定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41410116/

相关文章:

arrays - 使用 vb.net 将数组转为 Excel

AnkhSVN + Visual Studio 2013 预览版无法设置 - 加载挂起

c++ - qt:编译器发生内部错误

c++ - 如何使用指向友元函数的指针作为成员函数的参数

c++ - 为什么这个程序会导致段错误?

c++ - 任务管理器如何获取进程的命令行可执行路径?

python - numpy:如果 numpy 数组是 View ,则可靠(非保守)指示符

c - 堆栈损坏数组/段错误?在C中

tfs - TFS 2013-没有代码覆盖率结果

c# - 使用带有 SDK v2.0 的 Kinect for Windows 从文件加载视频