|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
void func(int b[][3]);
void func(int b[][3])
{
printf("%d\n", b[2][2]);
}
int main(void)
{
int a[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
func(a);
return 0;
}
这段代码为何不能编译成功,如何修改?
这个a传到func后是否变为了int a[3][3]={{0, 0, 1}, {0, 0, 5}, {0, 0, 9}}; 如果是这样,可以解释一下吗?
本帖最后由 jackz007 于 2022-12-24 23:48 编辑 #include <stdio.h>
void func(int b[][3])
{
printf("%d\n" , b[2][2]) ;
}
int main(void)
{
int a[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
} ;
func((int (*)[3]) a) ;
return 0 ;
}
编译、运行实况: D:\[00.Exerciese.2022]\C>g++ -o x x.c
D:\[00.Exerciese.2022]\C>x
9
D:\[00.Exerciese.2022]\C>
我们知道,二维数组 int a[3][4] int a[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
的元素在内存中实际上是按一维数组的顺序进行存放的: int a[12] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12} ;
二维数组 a 在 main() 中是按 a[3][4] 进行定义,而到了 func() 中,则按照 a[][3] 进行解析,虽然两边数组的末维不同,但是,只要统一按照一维数组进行解析,就不会出错。在 func() 中的 a[2][2] 是按末维为 3 的二维数组进行解析表达的,这个索引对应于一维数组的索引号应该是 2 x 3 + 2 = 8,就是说,被打印的元素是一维数组元素 a[8] 当然就是数字 9 了。
|
|