gpt4 book ai didi

c - 在 C 中更新二维数组

转载 作者:行者123 更新时间:2023-11-30 17:27:04 25 4
gpt4 key购买 nike

我必须遍历二维数组的每个索引并找到邻居值是什么,然后根据该值更新数组的索引。我下面的代码完成了所有这些工作,但是当我必须更新数组时,它会更新现有数组,因此下一个索引会产生不正确的输出。我尝试创建一个新数组,但是当我使用新数组时,没有任何内容更新并且它保持不变。这就是我现在所拥有的。

void ch(int **b, int w, int h)
{
int x,y,i,ct=0;
int **up;
up=malloc(sizeof(int *) * h);
for(i = 0; i<h; i++){
up[i]=malloc(sizeof(int)*w);
}

for (x=0;x<h;x++)
{
for(y=0;y<w;y++)
{
//...Computes Count Here(It Works)
//UPDATE BOARD - Does not update the board
if(b[x][y]==1 && ct<2)
{
up[x][y]=0;
}
else if(b[x][y]==1 && (ct==2 || ct==3))
{
up[x][y]=1;
}
else if(b[x][y]==1 && ct>3)
{
up[x][y]=0;
}
else if(b[x][y]==0 && ct==3)
{
up[x][y]=1;
}
ct=0;
}
}
b=up;
}

我尝试通过对其自身进行更改来更新二维数组 b,它更改了数组,但它不是我正在寻找的输出。它会在每次迭代时更改输出,因此其他索引的输出会发生变化,但我希望另一个数组能够跟踪输出,这样它就不会在每次迭代时更新 b 并给出正确的输出。我做错了什么不让我更新?解决这个问题的最佳方法是什么?

最佳答案

复制原始数组并将其用作引用。然后就可以直接更新原来的数组了。

void ch(int **b)
{
int **up = malloc(sizeof(*int)*h);
int i;
for (i = 0; i < w; i++)
{
up[i] = malloc(sizeof(int) * w);
memcpy(up[i], b[i], w * sizeof(int));
}
//
if (up[x][y] == 1)
b[x][y] = 0;
}
// free up

这可能比具有额外的间接级别更容易维护

void ch(int ***b)
{
int **up = *b;
// do everything else as you intended

// finalize with
*b = up;
// free up
}

此外,在制作副本时,您可以通过将临时副本分配为线性数组来提高性能

int *up = malloc(sizeof(int) * w * h);

if (up[y * w + x] == 0)
b[y][x] = 1;

关于c - 在 C 中更新二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26521926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com