小编TH讠*_*讠NK的帖子

二维数组是否可以实现为连续的一维数组?

我有一个关于二维数组的内存布局的问题。当我们定义一个,就像 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

6
推荐指数
1
解决办法
537
查看次数