https://github.com/Tiger1994/LeetCode/blob/master/Q68.cpp
append 需要重新分配空间的时候,会重新分配空间吗?初始内存地址会改吗?
作为参数的时候,如果append呢?会修改原来的append值吗?实验一下
https://blog.csdn.net/cyk2396/article/details/78893420
--------------------
切片数据结构
// slice 数据结构
type slice struct {
array unsafe.Pointer
len int
cap int
}
当传参时,函数接收到的参数是数组切片的一个复制,虽然两个是不同的变量,但是它们都有一个指向同一个地址空间的array指针,当修改一个数组切片时,另外一个也会改变,所以数组切片看起来是引用传递,其实是值传递
1. 切片和数组的区别
数组大小固定,切片不固定
2.
var sScore []int64
sScore[0] = 60 //出错,这时切片为空,不能赋值, 需要创建: sScore = make([]int64, 5, 10)
sScore[1] = 80
var sScore []int64
fmt.Println(cap(sScore)) //0
sScore = append(sScore, 61) //正常,当空间不够的时候append自动创建2倍空间, 1, len:1
sScore = append(sScore, 60) //正常,当空间不够的时候append自动创建2倍空间, 2, len:1
sScore = append(sScore, 62) //正常,当空间不够的时候append自动创建2倍空间, 4, len:3
fmt.Println(len(sScore))
切片合并
a := make([]int, 5) //a := make([]int, 0)
b := []int{2, 3, 4, 5, 6}
//注意切片和切片合并,append的参数是可变参数,使用切片作为参数的时候,这里的三个点,是必须的
//也可以使用 a = append(a, 1, 2, 3, 4, 5)这样的方式合并
//因为a已经开辟了5个元素,所以合并后,a的元素个数是10,前5个元素默认值都是0,
a = append(a, b...)
切片遍历
value是一个固定的临时变量,地址都相同,所以取value地址的时候,最终都指向了同一个变量
import "fmt"
func main() {
slice := []int{0, 1, 2, 3}
myMap := make(map[int]*int)
for index, value := range slice {
myMap[index] = &value
fmt.Printf("%v\n", &value)
}
fmt.Println("=====new map=====")
prtMap(myMap)
}
func prtMap(myMap map[int]*int) {
for key, value := range myMap {
fmt.Printf("map[%v]=%v\n", key, *value)
}
}