C语言中一维和二维数组大小的比较

C语言中一维和二维数组大小的比较,c,C,在C语言中,像inta[4]这样的数组创建5个位置来存储整数,包括a[0]到a[4] 但是对于像int这样的2D数组,a[2][2]只生成四个位置,而不是3*3=9个位置。原因是什么?无效前提:在C中,数组inta[4]创建4个位置,而不是5个。如果您在之后使用a[4],则通过缓冲区溢出调用未定义的行为。2D数组的行为与预期的一样。无效前提:在C中,数组inta[4]创建4个位置,而不是5个。如果您在之后使用a[4],则通过缓冲区溢出调用未定义的行为。2D数组行为与预期一致。您对1D数组的理解不

在C语言中,像
inta[4]
这样的数组创建5个位置来存储整数,包括
a[0]
a[4]


但是对于像
int这样的2D数组,a[2][2]
只生成四个位置,而不是3*3=9个位置。原因是什么?

无效前提:在C中,数组
inta[4]
创建4个位置,而不是5个。如果您在之后使用
a[4]
,则通过缓冲区溢出调用未定义的行为。2D数组的行为与预期的一样。

无效前提:在C中,数组
inta[4]
创建4个位置,而不是5个。如果您在之后使用
a[4]
,则通过缓冲区溢出调用未定义的行为。2D数组行为与预期一致。

您对1D数组的理解不正确<代码>整数a[4]为
4
整数而不是
5
整数保留位置

i、 e.
inta[4]
a[0]
a[1]
a[2]
a[3]
保留内存


对于2D数组,元素总数由
num of rows*num of columns
给出,因此yes
a[2][2]
包含4个整数。因此它为4个整数保留内存。

您对1D数组的理解是错误的<代码>整数a[4]为
4
整数而不是
5
整数保留位置

i、 e.
inta[4]
a[0]
a[1]
a[2]
a[3]
保留内存


对于2D数组,元素总数由
num of rows*num of columns
给出,因此yes
a[2][2]
包含4个整数。因此,它为4个整数保留内存。

如上所述,如何测量5?(1)否;定义
inta[4]创建4个位置
a[0]
<代码>a[3]
。您可以形成
&a[4]
(例如
a+4
)的地址进行比较,但您不能合法地取消对该地址的引用。(2) 2D数组的大小与1D数组的大小一致。当我看到这样的问题时,我想知道它是机器人、巨魔还是巨魔机器人。@juanchopanza我今天看到的情况更糟…C中的数组从0到n-1(n是数组的大小)进行索引…如上所述,你是如何测量5的?(1)否;定义
inta[4]创建4个位置
a[0]
<代码>a[3]
。您可以形成
&a[4]
(例如
a+4
)的地址进行比较,但您不能合法地取消对该地址的引用。(2) 2D数组的大小与1D数组的大小一致。当我看到这样的问题时,我想知道它是机器人、巨魔还是巨魔机器人。@juanchopanza我今天看到的情况更糟…C中的数组从0到n-1(n是数组的大小)进行索引…对不起,这是对的。。我三天没睡好觉。我都忘了。我问,这真是一个错误。:-)对不起,那是对的。。我三天没睡好觉。我都忘了。我问,这真是一个错误。:-)