首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用C覆盖现有的2D数组

用C覆盖现有的2D数组
EN

Stack Overflow用户
提问于 2022-01-27 22:47:50
回答 1查看 85关注 0票数 0

我目前正在用C编写一个项目,我需要能够用已经存储在另一个2D数组中的信息填充一个2D数组。在一个单独的C文件中,我有一个数组:

代码语言:javascript
复制
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

在我的主文件中,我有一个变量,我想在代码中的不同位置填充这两个数组的信息。(这并不是我正在做的事情,但这是总体要旨):

代码语言:javascript
复制
#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锯齿数组。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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数组的指针,这些指针可以随意更改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70886777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档