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

标签 c arrays memory

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

最佳答案

作为附加答案:

二维数组在内存中平铺,它是地址的线性集合。

如果您像这样可视化 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更多整数槽可以到达第三个元素。
array[3][2]变成指针算术*(array + 3 * <width of array> + 2) :

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

检查this回答为什么(int*)在那里。

关于c - 2d-array- arr[][0] 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35534074/

相关文章:

c++ - 优化代码 - CPU 与内存

arrays - 如何捕获 ls 或 find 命令的输出以将所有文件名存储在数组中?

ios - 使用 slider 导航一系列图像

android - Android 是否将 View 对象层次结构保存在内存中?

c# - 引用值的 'Type'存放在内存的什么地方?

c - 如何读取 C 中以空格分隔的 0-9 数字?

c++ - 有人可以推荐一本关于可移植 C/C++ 代码开发的书吗?

c - 链表 C 的段错误

java - 从数组实例调用 get(数组静态方法)

c++ - 在其他函数中设置结构成员的值