我想将两个2D数组传递给一个函数,以便复制整个数组。我正在使用双指针来执行此操作,但它显示错误。
void copy_arr(float **new_table,float **table,int m,int n)
{
//code
return;
}
显示2D阵列的错误' new_table'仅
调用函数:
void optimize(float **table,int m,int n)
{
int pivot[2];
find_pivot(table,m,n,pivot);
float new_table[m][n];
//code
copy_arr(new_table,table,m,n);
return;
}
错误:无法转换' float(*)[(((sizetype)(((ssizetype)n)+ -1))+ 1)]'到了漂浮**'争论' 1' to' void copy_arr(float **,float **,int,int)'
答案 0 :(得分:0)
在C中本身并不存在多维数组的概念。即我们称之为二维数组:
float fArray[10][10];
实际上,编译器将其解释为10个float数组的数组。因此,只能从单个数组中检索值的运算符[]
需要知道所有后续维度才能访问单个元素。
说你有两种传递多维数组的方法,第一种情况适用于第二维已知的情况(将概念扩展到多维数组所有其他维度,但第一种,必须知道):
void copy_arr(float new_table[][10], float table[][10], int m)
{
//code
return ;
}
如果维度是可变的,那么必须自己计算指向元素的指针:
void copy_arr(float *new_table, float *table, int m, int n)
{
//code
memcopy (new_table, table, sizeof(float)*m*n);
//Access last element assuming table[m][n]
printf("This is the last element: %f\n", table + ((m-1)*n + (n-1))*sizeof(float));
return ;
}
在C ++中,您可以使用std::vector