返回一个数组

时间:2014-09-01 15:01:41

标签: c arrays multidimensional-array

我正在尝试使用以下代码添加两个矩阵:

    #include <stdio.h>
    int matrix (void)
    {
        int a[2][2];
        int b[2][2];
        int c[2][2];
        int i, j;
        for (i = 0; i < 2; ++i) {
            for (j = 0; j < 2; ++j) {
                    scanf("%d", &a[i][j]);
            }
        }
        for (i = 0; i < 2; ++i) {
            for (j = 0; j < 2; ++j) {
                    scanf("%d", &b[i][j]);
            }
        }
        for (i = 0; i < 2; ++i) {
            for (j = 0; j < 2; ++j) {
                    c[i][j] = a[i][j] + b[i][j];
            }
        }
        return c;
    }
    int main ()
    {
        int i, j;
        int c[2][2];
        c = matrix();
        for (i = 0; i < 2; ++i) {
            for (j = 0; j < 2; ++j) {
                    printf("%d", c[i][j]);
            }
            printf("\n");
        }
        return 0;
    }

上面的代码会抛出很多错误。请解释为什么编译器会显示这么多错误。

编辑 - 我在编译上面的代码时使用了GCC 4.4.3。

EDIT2 - 编译上面代码时出现以下错误和警告。

test.c: In function ‘matrix’:
test.c:23: warning: return makes integer from pointer without a cast
test.c:23: warning: function returns address of local variable
test.c: In function ‘main’:
test.c:29: error: incompatible types when assigning to type ‘int[2][2]’ from type ‘int’

5 个答案:

答案 0 :(得分:2)

首先,您matrix返回int的本地数组,但声明它返回一个int值。

答案 1 :(得分:2)

修复你想要的东西。

#include <stdio.h>

int (*matrix(void))[2]{//return pointer as int (*)[2]
    static int c[2][2];//Can not be used to return the automatic local variables.
    int a[2][2];
    int b[2][2];
    int i, j;
    for (i = 0; i < 2; ++i) {
        for (j = 0; j < 2; ++j) {
                scanf("%d", &a[i][j]);
        }
    }
    for (i = 0; i < 2; ++i) {
        for (j = 0; j < 2; ++j) {
                scanf("%d", &b[i][j]);
        }
    }
    for (i = 0; i < 2; ++i) {
        for (j = 0; j < 2; ++j) {
                c[i][j] = a[i][j] + b[i][j];
        }
    }
    return c;
}
int main (){
    int i, j;
    int (*c)[2];
    c = matrix();
    for (i = 0; i < 2; ++i) {
        for (j = 0; j < 2; ++j) {
            printf("%d ", c[i][j]);//remove &
        }
        printf("\n");
    }
    return 0;
}

答案 2 :(得分:2)

试试这个固定代码:

#include <stdio.h>
void matrix (int c[][2]) //Fix 1
{
    int a[2][2];
    int b[2][2];
    int i, j;
    for (i = 0; i < 2; ++i) {
        for (j = 0; j < 2; ++j) {
                scanf("%d", &a[i][j]);
        }
    }
    for (i = 0; i < 2; ++i) {
        for (j = 0; j < 2; ++j) {
                scanf("%d", &b[i][j]);
        }
    }
    for (i = 0; i < 2; ++i) {
        for (j = 0; j < 2; ++j) {
                c[i][j] = a[i][j] + b[i][j];
        }
    }
}
int main ()
{
    int i, j;
    int c[2][2];
    matrix(c); //Fix 2
    for (i = 0; i < 2; ++i) {
        for (j = 0; j < 2; ++j) {
                printf("%d\t", c[i][j]); //Fix 3
        }
        printf("\n");
    }
    return 0;
}

答案 3 :(得分:0)

以下内容不会打印值:

printf("%d", &c[i][j]);

但是有些指针(如果它编译)。你必须这样做:

printf("%d", c[i][j]);

答案 4 :(得分:-1)

您使用return c返回2D数组,返回c只能用于返回数据类型不是1D或2D-Array的变量。要解决此问题,您需要返回2D数组,即

return [i][j]

此外,您已将c声明为2D-Array,但在返回时您将其用作变量。

int c[2][2];
c = matrix();

要修复它,请使用

c[i][j]= matrix(); 

或将c声明为

int c;