C 返回数组

C 返回数组,c,arrays,multidimensional-array,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) {

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

    #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;
    }
return [i][j]

一方面,您让
矩阵
返回一个
int
s的本地数组,但声明它返回一个
int
值。

一方面,您让
矩阵
返回一个
int
s的本地数组,但是声明它返回一个
int
值。

以下内容不会打印该值:

printf("%d", &c[i][j]);
return [i][j]
但是一些指针(如果编译的话)。你必须做到:

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

以下内容不会打印该值:

printf("%d", &c[i][j]);
return [i][j]
但是一些指针(如果编译的话)。你必须做到:

printf("%d", c[i][j]);
return [i][j]
你想怎么修就怎么修

#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;
}
return [i][j]
#包括
int(*矩阵(void))[2]{//返回指针作为int(*)[2]
static int c[2][2];//不能用于返回自动局部变量。
INTA[2][2];
int b[2][2];
int i,j;
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
scanf(“%d”、&a[i][j]);
}
}
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
scanf(“%d”、&b[i][j]);
}
}
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
c[i][j]=a[i][j]+b[i][j];
}
}
返回c;
}
int main(){
int i,j;
int(*c)[2];
c=矩阵();
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
printf(“%d”,c[i][j]);//删除&
}
printf(“\n”);
}
返回0;
}
根据需要进行修复

#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;
}
return [i][j]
#包括
int(*矩阵(void))[2]{//返回指针作为int(*)[2]
static int c[2][2];//不能用于返回自动局部变量。
INTA[2][2];
int b[2][2];
int i,j;
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
scanf(“%d”、&a[i][j]);
}
}
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
scanf(“%d”、&b[i][j]);
}
}
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
c[i][j]=a[i][j]+b[i][j];
}
}
返回c;
}
int main(){
int i,j;
int(*c)[2];
c=矩阵();
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
printf(“%d”,c[i][j]);//删除&
}
printf(“\n”);
}
返回0;
}
尝试此固定代码:

#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;
}
return [i][j]
#包括
void矩阵(int c[][2])//修复1
{
INTA[2][2];
int b[2][2];
int i,j;
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
scanf(“%d”、&a[i][j]);
}
}
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
scanf(“%d”、&b[i][j]);
}
}
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
c[i][j]=a[i][j]+b[i][j];
}
}
}
int main()
{
int i,j;
INTC[2][2];
矩阵(c);//固定2
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
printf(“%d\t”,c[i][j]);//修复3
}
printf(“\n”);
}
返回0;
}
尝试此固定代码:

#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;
}
return [i][j]
#包括
void矩阵(int c[][2])//修复1
{
INTA[2][2];
int b[2][2];
int i,j;
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
scanf(“%d”、&a[i][j]);
}
}
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
scanf(“%d”、&b[i][j]);
}
}
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
c[i][j]=a[i][j]+b[i][j];
}
}
}
int main()
{
int i,j;
INTC[2][2];
矩阵(c);//固定2
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
printf(“%d\t”,c[i][j]);//修复3
}
printf(“\n”);
}
返回0;
}

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

return [i][j]
另外,您已经将c声明为2D数组,但在返回时将其用作变量

return [i][j]
int c[2][2];
c = matrix();
要修复它,请使用

return [i][j]
c[i][j]= matrix(); 
或者声明c为

return [i][j]
int c;

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

return [i][j]
另外,您已经将c声明为2D数组,但在返回时将其用作变量

return [i][j]
int c[2][2];
c = matrix();
要修复它,请使用

return [i][j]
c[i][j]= matrix(); 
或者声明c为

return [i][j]
int c;

这些错误是什么?它是哪种编译器?你会事先收到很多警告:-主要是在将指针视为整数时。这不是一个编译错误--更糟糕。这是一只虫子。每当您尝试打印数组的内容时,都会执行如下操作:
printf(“%d”、&c[i][j])删除操作员的地址(
&
)。您想要打印存储在
c[i][j]
中的内容,而不是
c[i][j]
的地址。主要问题是函数在返回矩阵时返回int。这是我发现的唯一编译错误。还有其他警告。除此之外,还有语义错误。这些错误是什么?它是哪种编译器?你会得到很多警告:-主要是将指针视为整数。这不是一个编译错误--更糟糕。这是一只虫子。每当您尝试打印数组的内容时,都会执行如下操作:
printf(“%d”、&c[i][j])删除操作员的地址(
&
)。您想要打印存储在
c[i][j]
中的内容,而不是
c[i][j]
的地址。主要问题是函数在返回矩阵时返回int。这是我发现的唯一编译错误。还有其他警告。除此之外,还有语义错误。@RudyVelthuis我尊重原文。这样的人更喜欢对OP说。他们似乎是一个自鸣得意的观点。唉。。一个自鸣得意的断言被重复。请理解每一件事情所需要的时间和条件是不同的。需要改变的是什么