|
发表于 2023-11-9 20:29:40
|
显示全部楼层
这个错误是由于函数声明和定义中的数组维度不匹配导致的。
在函数声明 void func(int b[][3]); 中,参数 b 被声明为一个二维数组,其中第一维的大小未指定,而第二维的大小为 3。
在函数定义 void func(int b[][3]) 中,参数 b 被定义为一个二维数组,其中第一维的大小为 3,而第二维的大小为 3。
然而,在 main 函数中,数组 a 被声明为一个二维数组,其中第一维的大小为 3,而第二维的大小为 4。
因此,当你调用 func(a); 时,传递给函数的数组 a 的类型为 int (*)[4] ,而函数 func 期望的类型是 int (*)[3] ,两者不匹配,所以编译器报错。
为了解决这个问题,你可以修改函数声明和定义中的数组维度,使其与 a 数组的维度匹配。你可以将函数声明改为 void func(int b[][4]); ,并将函数定义改为 void func(int b[][4]) ,然后重新编译运行代码。
修改后的代码如下:
- #include <stdio.h>
- void func(int b[][4]);
- void func(int b[][4])
- {
- printf("%d\n", b[2][2]);
- }
- int main(void)
- {
- int a[][4] = {
- {1, 2, 3, 4},
- {5, 6, 7, 8},
- {9, 10, 11, 12}
- };
- func(a);
- return 0;
- }
复制代码
这样修改后,代码应该可以正确编译和运行,并输出 11 。 |
|