在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/