数组-简介与推导出数组的地址
数组
| 数组类型 | 存储地址计算 | 
|---|---|
| 一位数组 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
 
           golang工程师应该会的数据结构与算法
golang工程师应该会的数据结构与算法 
         
             
             关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号 
 
推荐文章: