我无法在C标准文档中找到它所说的多维数组是连续的。虽然可以从array elements are contiguous这一事实推断出来,但我希望从社区中获得一些观点。
以下代码按照我期望的顺序打印出数字,即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;
}
答案 0 :(得分:9)
是的,它可以通过归纳获得。 (只是添加,作为建议,如果有帮助,请尝试将多维数组视为数组数组。)
例如,考虑一个类似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]
,它们是连续的。
因此,数组的所有元素(和元素元素)都是连续的。
答案 1 :(得分:7)
根据6.2.5 Types
p20:
数组类型描述了一个连续分配的非空对象集 特定的成员对象类型,称为元素类型。元素类型应为 指定数组类型时完成。 ...
因此,所有数组类型(多维或非多维)都是连续分配的。
答案 2 :(得分:6)
是的,它们是连续的。我会说事实&#34;一个阵列&#34; (即单数)是连续的,推断出多维的。其中的每个数组必须是连续的,外部数组必须是这些数组的连续集合...
答案 3 :(得分:2)
C没有明确地具有多维数组,C具有数组数组,C中的数组在内存中连续表示。因此,C中的所有数组都是连续的。