二位数组传递参数的问题
我有如下一个函数要接受二位数组指针为参数:void PrintMatrix(int **x, int length)
{
int i, j;
for (i = 0; i < length; i++)
{
for (j = 0; j < length; j++)
printf("%i\t", x[i][j]);
printf("\n");
}
}
如果我传递的数组参数是动态分配的,则能正常运行,如:
情况一:
int **y;
int i, j;
y = malloc(sizeof(int*) * 5);
for (i = 0; i < 5; i++)
y[i] = malloc(sizeof(int)*5);
for (i = 0; i < 5; i++)
for (j = 0; j < 5; j++)
y[i][j] = i + j;
PrintMatrix(y, 5);
但如果我传递直接声明的二位数组参数时,程序运行时出现异常,如:
情况二:
int x[5][5];
int i, j;
for (i = 0; i < 5; i++)
for (j = 0; j < 5; j++)
x[i][j] = i + j;
PrintMatrix((int**)x, 5);
搜索到了一种解决的办法,处理时不用直接处理的方式,而是用*求取指针指向的值,如下:
void PrintMatrix(int **x, int length)
{
int i, j;
for (i = 0; i < length; i++)
{
for (j = 0; j < length; j++)
printf("%i\t", *((int*)x + length*i + j));
printf("\n");
}
}
情况二倒是能正常运行了,但情况一又出现了问题,有一部分数字显示不正常。
估计是动态分配的内存与静态分配的布局方式不一样造成的。
请问哪位高手能提供一种在两种状况下都能正常工作的调用方法么?