将2D数组作为参数传递给函数

时间:2015-12-05 23:05:20

标签: c arrays function pointers

该计划的目标是操纵2D阵列内的数据。

int main(void)
{
    int array[500][500];
    int x0, y0;
    if ( input(array, &x0, &y0)==0 )
        return 1;

    return 0;
}
int input( int array, int *x0, int *y0 ) {
    int x = 0;
    int y = 0;
    int err = 0;
    char c;
    printf("Enter sizes:\n");
    if ( scanf("%d %d", x0, y0)!=2 || *x0<=0 || *y0<=0 || *x0>500 || *y0>500 ) {
        printf("Invalid input.\n");
        return 0;
    }
    while ( y < *y0 ) { 
        x = 0;
        while ( x < *x0 ) { //reading entries in x coordinate
            c = getchar();

            switch(c) {
            case 'o' : array[y][x] = 1; break;
            case '.' : array[y][x] = 0; break;
            case '!' : array[y][x] = 2; break;
            default : err = 1; break;
            }
            x++;
        }
        if( x!=*x0 )
            err=1;
        y++; //move to another "line"
    }
    if (y!=*y0)
        err=1;
    if (err==1) {
        printf("Invalid input.\n");
        return 0;
    }

    return 1;
}

程序首先获取数组的尺寸,然后获得三个字母中的一个:o!.,例如:

3 3

ooo

.!o

...

问题是我的函数不接受它的参数:input(array, &x0, &y0)导致我无法在switch中写入该数组。前一种情况passing argument 1 of 'input' makes integer from pointer without a cast,而后者subscripted value is neither array nor pointer nor vector.

我之前的程序使用了一维数组,这种将数组传递给函数的方法很有效。

那么我应该如何将我的数组作为参数传递给函数呢?提前谢谢。

1 个答案:

答案 0 :(得分:1)

main函数之后移动input函数的代码,以便在编译input时知道main的原型。

input的原型更改为:

int input(int array[500][500], int *x0, int *y0) {

您的代码还有其他问题。例如,您没有正确处理每个矩阵行之后输入的换行符。