Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C多维数组是否连续且无孔?_C_Arrays_Multidimensional Array - Fatal编程技术网

C多维数组是否连续且无孔?

C多维数组是否连续且无孔?,c,arrays,multidimensional-array,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++)

在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;
}
#包括
int main()
{
int a[][3]={{1,2,3},{4,5,6},{7,8,9};
int*p=(int*)a;
int i;
对于(i=0;i
是的,可以通过归纳法获得。(作为一个建议,如果有帮助,请尝试将多维数组视为数组的数组。)

例如,考虑一个数组,如<代码> A[ 3 ] [ 3 ] < /代码> ./P>

  • 因此,
    a[0][0]
    a[0][1]
    a[0][2]
    a[0]
    的元素,它们是连续的

  • 接下来,
    a[0]
    a[1]
    a
    的元素,因此它将是连续的

等等

总之,
a[0][2]
a[1][0]
将彼此相邻,从而继续相邻

要获得更好的视觉效果,请参见下图

数组,比如说
intarr[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]
,它们是连续的

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


是的,它们是连续的。我想说的是,“数组”(即单数)是连续的,这意味着多维数组是连续的。根据
6.2.5类型
p20:

数组类型描述了一组连续分配的非空对象,其中 特定的成员对象类型,称为元素类型。元件类型应为: 每当指定数组类型时完成


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

C不显式地具有多维数组,C具有数组数组数组,并且C中的数组在内存中连续表示。因此,C中的所有数组都是连续的。

因为多维数组是数组的数组,所以元素是连续的(我认为)。它们最好是——用单个数组处理二维数组是一种相当常见的习惯用法,而不是嵌套for循环。如果不是这样,所有这些代码都将被破坏。类型为
z
数组[x][y]
保证只占用(x*y*sizeof(z))。请注意,
sizeof(z)
并不是在所有情况下都保证只占用类型所需的最大位数-例如,它可以更大,并且在某些CPU上的
sizeof(char)
,可以超过8。@tofronit:
sizeof(z)*x*y
x*y*sizeof(z)
具有各种类型的
x的优势,y
@chux抱歉,但那条评论对我来说没有多大意义。@Johncolman抱歉,我想确保新来者理解C没有多维数组,它有数组数组。@Blatter什么才算是“真正的”多维数组?实际上C标准多次提到多维数组,包括,例如,第§6.7.6.2章中的脚注142:“当多个“数组”规范相邻时,将声明一个多维数组。”@user694733你说得对,我完全忽略了这一点。我相信他可能指的是模拟MD阵列,就像C中的“通过引用”一样。谢谢你的确认。这是我的想法。