使用二维数组作为参数

时间:2013-11-21 21:41:15

标签: c++ arrays

我试图让一些函数在二维数组上运行:

void display_matrix(int**, int, int);
void gen_matrix(int**, int, int);

int main()
{
    srand(time(0));
    int m=5, n=3;

    int my_matrix[m][n];
    gen_matrix(my_matrix, m, n);
    display_matrix(my_matrix, m, n);
}

我不知道什么是错的,但是当我调用这些函数时出现以下错误: [错误]无法转换' int()[(((sizetype)(((ssizetype)n)+ -1))+ 1)]'到' int *'争论' 1' to' void gen_matrix(int **,int,int)'

我知道我可以使用vector但我正在尝试练习并记住指针和数组的使用。

2 个答案:

答案 0 :(得分:1)

声明<type> <name>[<dim1>][<dim2>]形式的矩阵定义了一个内存块,其隐式步长为dim1。通过使用多个dim1来访问内部元素以到达正确的行并从那里通过第二个维度进行偏移。

类型<type> <name>**是指向指针数组的指针 - 非常不同。该结构由一组指向数据行的指针组成。在调用子例程之前,必须对它们进行适当的分配和链接。也没有要求它们是连续分配的,并且需要对每个新行上的每个元素进行间接查找。

优点是行可以是不同的长度,适合一些没有矩形结构的算法。

答案 1 :(得分:0)

按以下方式更改代码

const int n = 3;

void display_matrix( int ( * )[n], int );
void gen_matrix( int ( * )[n], int);

int main()
{
    srand(time(0));
    const int m = 5;

    int my_matrix[m][n];
    gen_matrix( my_matrix, m );
    display_matrix(my_matrix, m );
}

或者您可以按照定义保留您的功能,但可以将其称为

gen_matrix( reinterpret_cast<int **>( my_matrix ), m, n);