C,是一种信仰

如何将多维数组作为参数传递给函数?(以二维数组为例)

# define X (3)
# define Y (5)

int main() {
    int
        d[X][Y]={1,2,3,4,5,6,7,8};
    /*我想打印d[][]的内容*/
}

那么,我们一般会这样写:

# define X (3)
# define Y (5)

int main() {
    int
        d[X][Y]={1,2,3,4,5,6,7,8};    /*我想打印d[][]的内容*/
    /*这是在main()中的实现方案*/
    int i,j;
   
for (i=0; i<=X-1; i++) {
        for (j=0; j<=Y-1; j++) {
            printf("%d, ",d[i][j]);
        }
        printf("\n");
    }
    return 0;
}

由于我们很可能经常会需要打印一个二维数组这样的东西,所以呢,我们会想写一个函数来专门干这件事儿:

# define X (3)
# define Y (5)

/*为了随时都能打印d[][],我打算写下面这个函数来干这件事*/
/*注意这个函数参数的写法。能改成int d[][]或int d[X][]或int d[X][Y]吗?
想想看,为什么能或者不能?*/
void show(int d[][5]) {
    int i,j;
    for (i=0; i<=X-1; i++) {
        for (j=0; j<=Y-1; j++) {
            printf("%d, ",d[i][j]);
        }
        printf("\n");
    }
    return;
}

int main() {
    int
        d[X][Y]={1,2,3,4,5,6,7,8};
    /*我想打印d[][]的内容*/
    /*这是利用函数的实现方案*/
    show(d);
    return 0;
}

再来看另一种形式的描写:

 

# define X (3)
# define Y (5)

/*进一步推导,你知道的,专业的程序员嘛,总喜欢在函数参数中写指针形式的参数,
而不是int d[][Y]这种样子。
所以,我们就有了下面这部分代码。*/
void show(int * d) {    /*看!这里是指针形式的参数*/
    int i,j;
    for (i=0; i<=X-1; i++) {
        for (j=0; j<=Y-1; j++) {
            printf("%d, ",d[i*Y+j]);/*看!这句话是不是深刻地反映了指针和数组元素之间的关系?*/
        }
        printf("\n");
    }
    return;
}

int main() {
    int
        d[X][Y]={1,2,3,4,5,6,7,8};
    /*我想打印d[][]的内容*/
    /*这是在main()中的实现方案*/
    show(d);
    return 0;
}

到此为止,我不讲了,读者可以自己领会上述代码的意义。

本文所有代码可以在这里下载

posted @ 2013-02-20 23:33  胖乎乎的王老师  Views(839)  Comments(0Edit  收藏  举报
Email 联系我:fzd19zx@qq.com