在C中,像int a[4]
这样的数组创建了5个位置来存储整数,包括a[0]
到a[4]
。
但是像int a[2][2]
这样的2D数组只生成四个位置,而不是3 * 3 = 9个位置。这是什么原因?
答案 0 :(得分:3)
您对1D阵列的理解不正确。 int a[4]
保留4
整数而非5
整数的位置。
即。 int a[4]
为a[0]
,a[1]
,a[2]
和a[3]
预留了内存。
对于2D数组,总元素由num of rows * num of columns
给出,因此是a[2][2]
包含4个整数。所以它为4个整数保留了内存。
答案 1 :(得分:1)
无效前提:在C中,数组int a[4]
创建4个位置,而不是5.如果之后使用a[4]
,则通过缓冲区溢出调用未定义的行为。 2D数组行为与预期一致。