[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的整个空间是连续的,

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