# Golang 切片地址 ```go var sa []byte ``` 如上的一个 byte 切片,虽然其声明形式与数组类似,但是其实质与数组相差很大。 数组本身就是一段连续的内存地址,因此分配数组时需要给定一个常量作为数组的长度。而切片长度并不固定,还可以动态改变长度,因此切片是一个数据结构,它包含两个部分,即切片信息的描述部分和数据部分。 因此,对切片取地址,就产生了两种方式: 1. 对切片本身取地址,得到切片描述信息部分的地址; 2. 对切片数据取地址,得到切片数据地址。 ```go sa := make([]byte, 4) // 切片本身的地址 psa1 := &sa // 切片数据的地址 psa2 := &sa[0] psa3 := &sa[2] ``` 以上 psa1 的值不等于 psa2 的值。 如果想将切片数据赋值到谋连续内存空间中,可采用如下方式: ```go sa := []byte{0x11, 0x22, 0x33, 0x44} var aa [4]byte copy(aa[:], sa) fmt.Println(aa) ```