数组-简介与推导出数组的地址
数组
数组类型 | 存储地址计算 |
---|---|
一位数组a[n] |
a[i] 的存储地址为: a+i*len |
二维数组a[m][n] |
a[i][j] 的存储地址(按行存储)为:a+(i*n+j)*len ; a[i][j] 的存储地址(按列存储)为: a+(j*n+i)*len |
len
为 数组中的 每一个空间 占的 字节数。i
就是下标
如何推出二维数组的存储地址计算公式?
假设有下表为二维数组:
0 | 1 | 2 | 3 |
---|---|---|---|
1 | 求X的数组存储地址 | ||
2 | |||
3 |
推出横向公式
在这里,X:a[1][2]
横向是一维数组,所以 可以得到长度
a + 4*len
那我们实际上不知道len,我们设 col列
则 一行为 a + col * len
设 行数为i, 表中 就是这个 [1]
多行 为 a + col * len * i
那么我们横向得到了。
纵向,来看,X 的 前面还是有位数的。
那么表中计算 纵向: 2
实际上不知道纵向是多少,所以这里还是设 纵向为 j
则纵向值为: j*len
那么行计算公式为:a + col * len * i + j*len
推导出:a + (col*i+j)*len
推出列公式
a + j *raw*len + i*len
同样推导出:a + (j*raw+i)len
数组公式是否需要背下来?
不需要,直接推出来就行了,而且可能面试时候,考试时候,起始点并不是从0开始。所以还是现场推吧
感谢关注
上海PHP自学中心-免费编程视频教学|Python教学|Web开发教学|全栈开发教学|加密与解密|Linux教学|Golang教学|
]
@author wangchunbo