我目前正在用C编写一个项目,我需要能够用已经存储在另一个2D数组中的信息填充一个2D数组。在一个单独的C文件中,我有一个数组:
int levelOne[][4] =
{{5,88,128,0},
{153,65,0,0},
{0,144,160,20}}; //First Array
int levelTwo[][4] =
{{5,88,128,0},
{153,65,0,0},
{0,144,160,20}}; //Second Array在我的主文件中,我有一个变量,我想在代码中的不同位置填充这两个数组的信息。(这并不是我正在做的事情,但这是总体要旨):
#include "arrayFile.c"
void main()
{
int arrayContainer[][4] = levelOne;
while (true)
{
func(arrayContainer);
if(foo)
{
arrayContainer = levelTwo;//Switches to the other array if the conditional is met.
}
}
}我知道这个方法不起作用--在数组中的项被实例化后,您不能覆盖它们。但有办法做这种事吗?我知道我很可能需要使用指针来完成这个任务,而不是完全覆盖数组,但是在互联网上并没有太多关于多维数组指针的信息。在这种情况下,什么是最佳实践?
而且,我也不知道会有多少个4的数组,所以我不能使用标准的3D数组,只需在索引之间切换,除非有一种方法可以生成一个我不知道的3D锯齿数组。
发布于 2022-01-27 23:07:36
考虑到您所显示的定义(如它们),您所需要的只是memcpy(arrayContainer, levelTwo, sizeof LevelTwo);。
您应该确保arrayContainer有足够的内存来包含复制的数据,并且LevelTwo (因为它用作sizeof的操作数)是实际数组的指示符,而不是指针。如果不是,请用数组的大小替换sizeof LevelTwo。
如果您不需要填充数据的实际内存,而只需要一种引用不同数组内容的方法,那么将arrayContainer作为指针而不是数组,就像使用int (*arrayContainer)[4];一样。然后可以使用arrayContainer = levelOne;或arrayContainer = levelTwo;来更改它指向的数据。
,我也不知道会有多少个4的数组,所以我不能使用标准的3D数组,只能在索引之间切换,除非有一种方法可以生成一个我不知道的3D锯齿数组。
有一个指向动态分配内存的指针是完全可能的,这个指针中充满了指向四个int数组的指针,这些指针可以随意更改。
https://stackoverflow.com/questions/70886777
复制相似问题