[C/C++]多重指針和多維數組

通常若傳遞多維數組多爲實參,通常要提供除最高維度外,其它維度的寬度,如

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的整個空間是連續的,

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章