我正在尝试使用以下代码添加两个矩阵:
#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’
答案 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;