初始化多维数组
Posted
技术标签:
【中文标题】初始化多维数组【英文标题】:Initializing a multidimensional array 【发布时间】:2015-06-23 14:09:37 【问题描述】:我正在尝试批量初始化一个多维数组,但似乎无法使其工作或找到示例!
我正在使用的尺寸足够大,我不想手动指定它们!
更准确地说:
int test[5][192];
for(int i = 0; i < 5; i++)
int temp[192] = ...;
test[i] = temp;
// use variable test here..
我想使用这种方法,因为 temp 数组是根据变量 i 动态定义的。
这种类型的初始化可能吗?
temp 数组是否应该在动态内存中?
自从初始化之后,我将对 test 的第一个元素的引用传递给另一个函数,并且我无法控制另一个函数如何传递我的元素需要保留数组的数据类型!
【问题讨论】:
如果你这样做,我相信你会得到一个无效的数组分配。 不重复,因为目标是保持简单的数组数据类型 【参考方案1】:如果你想复制临时数组的值,而不是“=”,你应该使用内存复制
memcpy( test[i], temp, sizeof(temp[192]));
【讨论】:
这似乎就是我要找的东西!会试一试!谢谢【参考方案2】:数组没有复制赋值运算符。所以这对数组来说是不可能的。
如果您将动态分配每一行,那么无论如何您都必须在某处存储其元素的数量。因此,当每行中的元素数量可能不同时,即使是动态分配的数组也不适合这种情况。
您应该改用标准容器std::vector<std::vector<int>>
。
【讨论】:
【参考方案3】:您不使用数组中的第二维作为测试数组。你只写test[],但你必须写test[][]。 我认为您不必使用临时数组。您可以直接初始化数组,而无需使用临时数组。
我不确定,但 memcpy 仅用于一维数组,而不用于多维数组
【讨论】:
由于一个简单的数组就相当于一个多维数组,所以代码就可以了!【参考方案4】:如果你知道,Temp 和 test[i] 是两个指向内存的指针 因此,如果您打印 temp 或 test[i],您将看到它们在内存中的起始地址。 在您的代码中,您 丢失 test[i] 的地址,因为您将指针 test[i] 更改为 温度 现在他们都指向 temp 开始的同一个地方!
【讨论】:
以上是关于初始化多维数组的主要内容,如果未能解决你的问题,请参考以下文章