gpt4 book ai didi

c - 将二维数组重新定义为另一个二维数组 C 的引用副本

转载 作者:行者123 更新时间:2023-11-30 19:02:21 26 4
gpt4 key购买 nike

我试图通过引用将二维数组复制到另一个变量中,以避免不必要的计算。我本质上有两个二维数组,current_array 和 new_array,并且我从 current_array 生成 new_array 然后替换。

我正在尝试使用 openmp 来编写 conways 生命游戏,但在将新数组复制到旧数组时遇到问题。我尝试过使用 *current_array=*new_array、&current_array=&new_array、...以及所有其他组合。我不太了解 C 或指针,但老师坚持我们使用 C。

void NextArray(int const height, int const width, int const CurrentArray[height][width], int NewArray[height][width]){
for(int i = 0; i < height; ++i){
for(int j = 0; j < width; ++j){
NewArray[i][j] = Newpoint(i,j, CurrentArray);
}
}
}


int main(){
int CurrentArray[height][width];
int NewArray[height][width];
InitialArray=fopen("matrix.txt", "r");

for(long long i = 0; i < height; ++i){
for(long long j = 0; j < width; ++j){
fscanf(InitialArray, "%d", &CurrentArray[i][j]);
}
}

NextArray(height, width, CurrentArray, NewArray);
CurrentArray = NewArray;
return 0;
}

如果您像这样定义 NewPoint,我希望 CurrentArray 具有与 NextArray 函数相同的信息:

void NextArray(int const i, int const j, int const CurrentArray[height][width]){
if (CurrentArray[i][j]){
return 0;
}
return 1;
}

高度 = 2、宽度 = 2 和“matrix.txt”作为包含以下内容的文件:

0 0
1 1

那么 CurrentArray 应该是

1 1
0 0

最佳答案

要将数组复制到相同类型(相同维度和元素类型)的数组,请使用:

memcpy(NewArray, CurrentArray, sizeof NewArray);

要创建引用另一个数组的指针,请使用:

int (*NewArray)[width] = CurrentArray;

这是有效的,因为当 CurrentArray在大多数表达式中使用,它会自动转换为指向其第一个元素的指针。由于它是一个数组的数组,因此它的第一个元素是一个数组。该数组的类型为 int [width] ,指向此类数组的指针的类型为 int (*)[width] 。所以声明NewArrayint (*NewArray)[width]将其定义为具有要分配的正确类型(并且充当)指向 CurrentArray 第一个元素的指针.

根据您的任务,您可能需要两个单独的数组 - 您希望旧数据和新数据都可用。您的标题要求“引用副本”,但您可能不希望引用旧数组,因为这样您就只有一组通过两个不同标识符访问的数据。

关于c - 将二维数组重新定义为另一个二维数组 C 的引用副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56094905/

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