通常若傳遞多維數組多爲實參,通常要提供除最高維度外,其它維度的寬度,如
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的整個空間是連續的,