复合数据类型(一) 数组与切片

79 阅读1分钟

数组

声明方式

var arr [N]T // 这是数组
var arr1 []T // 这是切片?是

// 初始化赋值
var arr2 = [N]/[...]int {x,x,x,x,x,}

// 稀疏矩阵初始化赋值
var arr3 = [...]int {
99:x1, // 下标99的值赋值为x1
13:x2, // 下标13的值赋值为x2
}

Go语言,数组不仅在逻辑上连续,在go 运行时也是在内存分配一整块连续的内存。通过内建函数len、以及unsafe.Sizeof可获取长度额大小

切片

声明方式

// 同数组的却别在于没有长度
var nums = []int{1,23,4,2} 

// go运行时的数据结构表示

type slice struct {
    array unsafe.Pointer
    len   int
    cap   int
}

// 声明方式一:make

// 声明方式二:array[low:high:max], low:high 按下标左闭右开

// 声明方式三:基于切片创建切片,类似二

image.png 图片来源:static001.geekbang.org/resource/im…