我有一个关于二维数组的内存布局的问题。当我们定义一个,就像 int 一样a[3][4],分配给这个数组的内存是连续的吗?
或者换句话说,二维数组是否被实现为连续的一维数组?
如果答案是肯定的,访问是否a[0][6]等同于访问a[1][2]?
我编写了以下 C 程序。
#include <stdio.h>
int main(){
int a[3][4] = {{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}};
printf("%d %d\n", a[0][6], a[1][2]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我发现输出是7 7.
a[0][6]看似非法,但它指出a[1][2],我想知道为什么,这样的操作合法吗?
c arrays memory-layout multidimensional-array language-lawyer