C语言中的二维数组,地址生成
在C语言中,地址是如何在数组中生成的,比如[x][y]是如何得到一个特定的值的,我知道这不是一个大问题,但实际上即将开始编码。嵌套数组是数组的数组 例如,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
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