我试图通过引用将2d数组复制到另一个变量中,以避免不必要的计算。我基本上有两个二维数组,current_array和new_array,然后从current_array生成new_array,然后替换。
我正在尝试使用openmp编程游戏,但我在将新数组复制到旧数组时遇到问题。我尝试使用* 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
答案 0 :(得分:1)
要将数组复制到相同类型(相同尺寸和元素类型)的数组,请使用:
memcpy(NewArray, CurrentArray, sizeof NewArray);
要创建指向另一个数组的指针,请使用:
int (*NewArray)[width] = CurrentArray;
之所以起作用,是因为在大多数表达式中使用CurrentArray
时,它会自动转换为指向其第一个元素的指针。由于它是一个数组数组,因此它的第一个元素是数组。该数组的类型为int [width]
,指向该数组的指针的类型为int (*)[width]
。因此,将NewArray
声明为int (*NewArray)[width]
会将其定义为具有正确的类型,该类型将分配给指针CurrentArray
的第一个元素(并像指针一样)。
鉴于您的任务,您可能需要两个单独的数组-您希望同时拥有旧数据和新数据。您的标题要求提供“引用副本”,但您可能不希望引用旧数组,因为那样一来,只有一组数据可以通过两个不同的标识符进行访问。