《带你学C带你飞》的S1E29
#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;
}
怎么就输出了9???求大神详解 二维数组
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 \
};
同样的道理,在函数 func() 中,如果把 a 视为末维为 3 的二维数组 b,则 b[2][2] 应当对应于 a2 + 2] = a = 9 jackz007 发表于 2019-9-21 21:49
二维数组
为什么对应末维属于是3就是3×2+2,能再给我解释下吗 本帖最后由 jackz007 于 2019-9-22 10:59 编辑
来自异界的飞猪 发表于 2019-9-22 08:04
为什么对应末维属于是3就是3×2+2,能再给我解释下吗
末维为 4 的二维数组
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 \
};
同样可以视为另一个末维为 3 的二维数组:
int a = {
{1, 2, 3}, \
{4, 5, 6}, \
{7, 8, 9}, \
{10, 11, 12}
};
因为这三种不同形式表达的数组,在内存中的存储映像是完全一样的。
在新的二维数组中,a 的值是 9 是不是就顺理成章了, 3×2+2 的索引算法也不难理解了吧。 jackz007 发表于 2019-9-22 10:53
末维为 4 的二维数组
太感谢了
页:
[1]