参数和指针课后作业,萌新求教
#include <stdio.h>void func(int b[]);
void func(int b[])
{
printf("%d\n", b);
}
int main(void)
{
int a = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
func(a);
return 0;
}
这段代码为何不能编译成功,如何修改?
这个a传到func后是否变为了int a={{0, 0, 1}, {0, 0, 5}, {0, 0, 9}}; 如果是这样,可以解释一下吗? 本帖最后由 jackz007 于 2022-12-24 23:48 编辑
#include <stdio.h>
void func(int b[])
{
printf("%d\n" , b) ;
}
int main(void)
{
int a = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
} ;
func((int (*)) a) ;
return 0 ;
}
编译、运行实况:
D:\\C>g++ -o x x.c
D:\\C>x
9
D:\\C>
我们知道,二维数组 int a
int a = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
的元素在内存中实际上是按一维数组的顺序进行存放的:
int a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12} ;
二维数组 a 在 main() 中是按 a 进行定义,而到了 func() 中,则按照 a[] 进行解析,虽然两边数组的末维不同,但是,只要统一按照一维数组进行解析,就不会出错。在 func() 中的 a 是按末维为 3 的二维数组进行解析表达的,这个索引对应于一维数组的索引号应该是 2 x 3 + 2 = 8,就是说,被打印的元素是一维数组元素 a 当然就是数字 9 了。
页:
[1]