2d-array-arr [] [0]是什么意思?

时间:2016-02-21 08:44:24

标签: c arrays memory

在C中,如果2d数组的格式是arr [n] [0],那么这是一维数组吗? 如果列数是0,它如何存储在内存中?

3 个答案:

答案 0 :(得分:1)

如果你的意思是像

那样的数组声明
T arr[n][0];

其中T是类型说明符,然后它是无效的。

符合C标准(6.7.6.2数组声明符)

  

1除了可选的类型限定符和关键字static之外,还有   [和]可以划定表达式或*。如果他们划定表达式   (指定数组的大小),表达式应具有   整数类型。如果表达式是常量表达式,它应该   值大于零 ....

答案 1 :(得分:1)

作为补充答案:

二维数组在内存中平面排列,它是一个线性的地址集合。

如果您想象这样的4X4阵列:

[0][0][0][0]
[1][1][1][1]
[2][2][2][2]
[3][3][3][3]

数组在内存中布局如下:

[0][0][0][0][1][1][1][1][2][2][2][2][3][3][3][3]

例如,当声明一个以二维数组作为参数的函数时,您总是需要为数组的第二部分提供大小。

您可以同时提供两者,或仅提供第二种:
int func(int array[4][4])int func(int array[0][4])
但是你不能同时省略或只提供第一个尺寸。

为什么呢?因为只需要某些大小来执行正确的指针运算:

例如,为了使用array[3][2],我们会向下移动3行,跨越2行,每行4 integers宽= 4 * 3整数插槽,然后再添加2整数槽来到第3个元素。
array[3][2]变成指针算术*(array + 3 * <width of array> + 2)

array[3][2] == *((int*)array + 3 * 4 + 2)

检查this答案,了解(int*)的原因。

答案 2 :(得分:0)

偷偷地说我认为它存储在内存中的一维数组中。 2D不适合我们用于计算机。

关于arr [n] [0]的问题,列数不是0. arr [n] [0]只是意味着你试图访问第n行,第0列的元素。基本上是第一行中的任何元素。你仍然有一个二维数组而不是一维数组。