我有一个3D数组arr1[16][8][9]
,我想将此数组的内容分配给一维数组arr2[36]
。所以我在尝试:
arr2[0] = arr1[0][0][0];
arr2[1] = arr1[0][0][1];
......
arr2[8] = arr1[0][0][8];
我正在调用一个函数:
func_arr(int arr2[36], int arr1[16][8][9])
函数声明如下:
void func_arr(int arr2[36],int arr1[][8][9]);
但是数组赋值似乎无效。有什么更好的方法呢?
答案 0 :(得分:0)
函数调用似乎不正确。替换下面的行
func_arr(int arr2[36], int arr1[16][8][9])
与
func_arr(arr2, arr1);
您的第一个函数参数的类型是int [36]
,并且您正在传递arr2[36]
。假设arr2为int arr2[36]
,arr2[36]
的类型为int
,因此类型不匹配。此外,arr2 [36]是位于arr2结束后的地址处的int。
答案 1 :(得分:0)
为什么不使用指针?
使用函数调用
func_arr(arr2, arr1);
,函数定义为
int func_arr(int *ptr, int (*ptr2)[16][8][9])
{
int i,j,k;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
for(k=0;k<3;k++)
{
*ptr = *(*((*ptr2)[i]+j)+k);
ptr++;
}
}
}
}
这会将所有3D数组值转换为1D数组