C - 传递动态分配的3D矩阵功能

时间:2017-11-22 20:16:42

标签: c multidimensional-array

在我的主要功能中,我创建了一个动态3D数组,并成功地对其进行了分配。

    int ***board = (int ***)malloc(counter * sizeof(int **));
    for(int i = 0; i < counter; i++){

        board[i] = (int **) malloc(dimension[i] * dimension[i] * sizeof(int));
    }

然后我想将它传递给定义为:

的函数
void readPuzzle(int board[][MAX][MAX], int *dimension, int counter,const char *);

我这样传递:

readPuzzle(board, dimension, counter, argv[1]);

但我一直收到这个错误,我搜索它但从来没有解决过它!

main.c: In function ‘main’:
main.c:22:13: warning: passing argument 1 of ‘readPuzzle’ from       incompatible pointer type [-Wincompatible-pointer-types]
readPuzzle(board, dimension, counter, argv[1]);
         ^~~~~
In file included from main.c:4:0:
headers.h:7:6: note: expected ‘int (*)[100][100]’ but argument is of type     ‘int ***’
void readPuzzle(int board[][MAX][MAX], int *dimension, int counter, const char *);

1 个答案:

答案 0 :(得分:0)

如果您的2D数组具有可变维度,则需要int ***,但此原型

void readPuzzle(int board[][MAX][MAX], int *dimension, int counter, const char *);

board传递的int ***不兼容,因为它需要一个2D数组数组,而不是三重指针。

所以解决它:

void readPuzzle(int ***board, int *dimension, int counter, const char *);

但您仍需要跟踪每个&#34;切片&#34;的尺寸。

另一种选择,如果2D数组具有固定的维度MAX*MAX,则分配一个2D数组数组,如下所示:

int (*board)[MAX][MAX] = malloc(counter*sizeof(*board));

现在您可以将board作为int board[][MAX][MAX]传递。当然,如果不是所有数据都被使用,您仍然需要在某处跟踪最大尺寸。