通常若传递多维数组多为实参,通常要提供除最高维度外,其它维度的宽度,如
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的整个空间是连续的,