C多维数组是否连续没有孔?

Bra*_*ran 7 c arrays multidimensional-array

我无法在C标准文档中找到它说多维数组是连续的.虽然可以从数组元素是连续的事实推断出来,但我想从社区中获得一些观点.

以下代码按照我期望的顺序打印出数字,即1 - 9.

#include <stdio.h>

int main()
{
    int a[][3] = {{1,2,3},{4,5,6},{7,8,9}};
    int* p = (int*)a;
    int i;

    for (i = 0; i < sizeof(a)/sizeof(int); i++)
        printf("%d ",p[i]);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Sou*_*osh 10

是的,它可以通过归纳获得.(仅作为建议,如果有帮助,请尝试将多维数组视为数组数组.)

例如,考虑一个类似的数组a[3][3].

  • 所以a[0][0],a[0][1]a[0][2]是的元素a[0],他们将是连续的.

  • 接着,a[0]a[1]是的元件a,所以这将是连续的

等等.

合在一起,a[0][2]并将a[1][0]彼此相邻,从而继续相邻.

有关更好的视觉表示,请参见下图.

的阵列,比方说int arr[4][5],具有四个,a[0],a[1],a[2]a[3]它们是邻接的.

现在每个那些有五,如a[n][0],a[n][1],a[n][2],a[n][3],a[n][4]和他们是连续的.

因此,数组的所有元素(和元素元素)都是连续的.

多维数组,图像CR:IIT-KGP


Mic*_*kis 7

根据6.2.5 Typesp20:

数组类型描述了具有特定成员对象类型的连续分配的非空对象集,称为元素类型.只要指定了数组类型,元素类型就应该是完整的....

因此,所有数组类型(多维或非多维)都是连续分配的.


noe*_*cus 6

是的他们是连续的.我会说事实"一个数组"(即单数)是连续的,推断出多维数据.其中的每个数组必须是连续的,外部数组必须是这些数组的连续集合......