Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的二维数组,地址生成_C_Arrays - Fatal编程技术网

C语言中的二维数组,地址生成

C语言中的二维数组,地址生成,c,arrays,C,Arrays,在C语言中,地址是如何在数组中生成的,比如[x][y]是如何得到一个特定的值的,我知道这不是一个大问题,但实际上即将开始编码。嵌套数组是数组的数组 例如,int[][6]是int[6]的数组 假设一个4字节的int,外部数组中的每个元素都是6*4=24字节宽 因此,arr[4]获取外部数组中的第三个数组,或*(arr+4*24) arr[4]是正常的int[]arr[4][2]获取此内部数组中的第二个int,或*(arr+4*24+2*4)C中的二维数组是矩形的。例如: int matrix[2

在C语言中,地址是如何在数组中生成的,比如[x][y]是如何得到一个特定的值的,我知道这不是一个大问题,但实际上即将开始编码。

嵌套数组是数组的数组

例如,
int[][6]
int[6]
的数组 假设一个4字节的
int
,外部数组中的每个元素都是
6*4
=24字节宽

因此,
arr[4]
获取外部数组中的第三个数组,或
*(arr+4*24)


arr[4]
是正常的
int[]
arr[4][2]
获取此内部数组中的第二个
int
,或
*(arr+4*24+2*4)
C中的二维数组是矩形的。例如:

int matrix[2][3];

分配单个内存块
2*3*sizeof(int)
字节大小。寻址
矩阵[0][1]
只需将
0*(3*sizeof(int))
添加到
sizeof(int)
。然后将该总和添加到
矩阵开始的地址。

这取决于您所考虑的数组的数据类型

例如,对于整数数组,每个值包含4个字节,因此X长的行将占用4个字节

因此,X*Y的二维矩阵将是4*X*Y字节

任何地址说Arry[X][Y]都是 计算为:(Arry的基址) +(X*列数)+(Y//当前行中的偏移量)

例如

您可以将其可视化为:

anArray

H|e|l|l|o| |W|o|r|l|d|!|\0|F|e|b|r|u|a|r|y|\0|\0|\0|\0|\0|J|o|h|n|\0|\0|\0|0|\0
^                          ^                              ^
0                          13                             26

实际上,所有未提供初始值设定项的字符都保证被初始化为\0。因此,您应该将所有的
+
替换为
\0
H|e|l|l|o| |W|o|r|l|d|!|\0|F|e|b|r|u|a|r|y|\0|\0|\0|\0|\0|J|o|h|n|\0|\0|\0|0|\0
^                          ^                              ^
0                          13                             26