切片

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)
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值