通常若传递多维数组多为实参,通常要提供除最高维度外,其它维度的宽度,如

void read(int input[][9][9], char *filename);

当然也可以将形参写成如下形式,不过这样通常要额外提供宽度参数

void read(int **input, int width, char *filename);

此时对应的实参就可以写成

int node[MAXNODE][MAXNODE] =`0`;read((int **)node, 9, FILENAME);

或者

int *node[MAXNODE];node[0] = (int *)malloc(sizeof(int) * 9);read(node, 9, FILENAME);

重点来了,在函数的定义中

C++可以直接使用

fscanf(fin, "%d", &input[i][j]);

来访问数组,当然要保证已经为指针分配了足够的空间

但对于C而言

只能使用如下形式

fscanf(fin, "%d", (((int*)(input + 0 * i)) + j));printf("%d ", *((int*)(input + 0 * i) + j));printf("%d ", *((int*)(input + 0 * i + j)));//同上,此形式要保证input是二维数组

因为后者的成立的前提是input的整个空间是连续的,