首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重试数组

重试数组
EN

Stack Overflow用户
提问于 2014-09-01 15:01:40
回答 5查看 140关注 0票数 1

我试图使用以下代码添加两个矩阵:

代码语言:javascript
运行
复制
    #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 --在编译上面的代码时,我收到了以下错误和警告。

代码语言:javascript
运行
复制
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’
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-09-01 15:15:44

按你想要的做吧。

代码语言:javascript
运行
复制
#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
EN

Stack Overflow用户

发布于 2014-09-01 15:06:18

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

票数 2
EN

Stack Overflow用户

发布于 2014-09-01 15:17:13

试试这个固定的代码:

代码语言:javascript
运行
复制
#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;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25608613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档