在 C 中覆盖现有的二维数组
Overwriting an existing 2D Array in C
我目前正在用 C 编写一个项目,我需要能够用已经存储在另一个二维数组中的信息填充一个二维数组。在一个单独的 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.
}
}
}
我知道这种方法行不通 - 数组中的项在实例化后无法覆盖。但是有什么办法可以做这样的事情吗?我知道我很可能需要使用指针来执行此操作而不是完全覆盖数组,但是 Internet 上没有很多关于多维数组指针的信息。在这种情况下,最佳做法是什么?
此外,我不知道到底会有多少个 4 数组,所以我无法使用标准 3D 数组并只能在索引之间切换,除非有办法制作 3D 锯齿状我不知道的数组。
根据您显示的定义,您只需要 memcpy(arrayContainer, levelTwo, sizeof LevelTwo);
。
您应该确保 arrayContainer
有足够的内存来包含复制的数据,并且 LevelTwo
,因为它被用作 sizeof
的操作数,是实际的指示符数组,不是指针。如果不是,请将 sizeof LevelTwo
替换为数组的大小。
如果您不需要用数据填充的实际内存,而只是需要一种方法来引用不同数组的内容,请将 arrayContainer
设为指针而不是数组,如 int (*arrayContainer)[4];
.然后你可以使用 arrayContainer = levelOne;
或 arrayContainer = levelTwo;
来更改它指向的数据。
Also, I don't know exactly how many arrays of 4 there will be, so I wouldn't be able to use a standard 3D array and just switch between indexes, unless there's a way to make a 3D jagged array that I don't know about.
完全有可能有一个指向动态分配内存的指针,其中充满了指向四个数组的指针int
,并且这些指针可以随意更改。
我目前正在用 C 编写一个项目,我需要能够用已经存储在另一个二维数组中的信息填充一个二维数组。在一个单独的 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.
}
}
}
我知道这种方法行不通 - 数组中的项在实例化后无法覆盖。但是有什么办法可以做这样的事情吗?我知道我很可能需要使用指针来执行此操作而不是完全覆盖数组,但是 Internet 上没有很多关于多维数组指针的信息。在这种情况下,最佳做法是什么?
此外,我不知道到底会有多少个 4 数组,所以我无法使用标准 3D 数组并只能在索引之间切换,除非有办法制作 3D 锯齿状我不知道的数组。
根据您显示的定义,您只需要 memcpy(arrayContainer, levelTwo, sizeof LevelTwo);
。
您应该确保 arrayContainer
有足够的内存来包含复制的数据,并且 LevelTwo
,因为它被用作 sizeof
的操作数,是实际的指示符数组,不是指针。如果不是,请将 sizeof LevelTwo
替换为数组的大小。
如果您不需要用数据填充的实际内存,而只是需要一种方法来引用不同数组的内容,请将 arrayContainer
设为指针而不是数组,如 int (*arrayContainer)[4];
.然后你可以使用 arrayContainer = levelOne;
或 arrayContainer = levelTwo;
来更改它指向的数据。
Also, I don't know exactly how many arrays of 4 there will be, so I wouldn't be able to use a standard 3D array and just switch between indexes, unless there's a way to make a 3D jagged array that I don't know about.
完全有可能有一个指向动态分配内存的指针,其中充满了指向四个数组的指针int
,并且这些指针可以随意更改。