首页 新闻 搜索 专区 学院

二位数组传递参数的问题

0
悬赏园豆:10 [待解决问题]

二位数组传递参数的问题

我有如下一个函数要接受二位数组指针为参数:

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");

    }

}

情况二倒是能正常运行了,但情况一又出现了问题,有一部分数字显示不正常。

估计是动态分配的内存与静态分配的布局方式不一样造成的。

请问哪位高手能提供一种在两种状况下都能正常工作的调用方法么?

这个问题看看大家能解决了吗?  填补指针缺陷,谢谢了!

Byron   lee的主页 Byron lee | 初学一级 | 园豆:185
提问于:2011-03-11 11:38
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册