将2D数组传递给函数

时间:2016-01-24 17:27:26

标签: c++ arrays pointers double-pointer

我想将两个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)'

1 个答案:

答案 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