什么是数组
数组是是一种线性表数据结构, 存放在连续内存空间上的相同类型数据的集合。
- 数组下标都是从0开始的。
寻址公式
a[i]_address = base_address + i * data_type_size
- 数组内存空间的地址是连续的
正是因为数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址。
数据的插入,删除
平均时间复杂度为 O(n)
数组的删除不是真正意义的删除,因为数组需要保持内存空间的连续
比如上图,删除a[3],实际上是把后面的数字往前面移动
Go 创建二维数组
// You can edit this code!
// Click here and start typing.
package main
import "fmt"
func main() {
var arr = [2][3]int{{0, 1, 2}, {3, 4, 5}}
for i := 0; i < len(arr); i++ {
for j := 0; j < len(arr[i]); j++ {
fmt.Printf("arr[%v][%v] = %v \n", i, j, arr[i][j])
fmt.Printf("arr[%v][%v]的地址=%p\n", i, j, &arr[i][j])
}
}
}
打印结果:
可以看Go数组的地址字节数相差不同
依次为:0xc000120000,0xc000120008,0xc000120010,0xc000120018,0xc000120020,0xc000120028
具体原因我会查阅下资料,后续解答