zoukankan      html  css  js  c++  java
  • Golang基础——数据类型:切片

    切片:

    大小不确定的放在堆区(实际值),固定长度的在栈区(变量名:存地址)

    添加切片数据的时候,地址可能发生改变,当前内存不能连续并且足够大。

    扩容:<=1024 :两倍;> 1024 :每次扩容上一次的 1 / 4

    引用传递
    var a []int
    a = append(a, 1, 2, 3, 4, 5)
    fmt.Println(a)
    fmt.Printf("%T
    ", a)
    fmt.Println(len(a)) // 长度
    fmt.Println(cap(a)) // 容量
    var b = []int{1, 2, 3}
    fmt.Println(b)
    c := []int{1, 2, 3}
    fmt.Println(c)
    d := make([]int, 5, 10) // 长度 5,容量 10
    fmt.Println(d)
    fmt.Println(len(d))
    fmt.Println(cap(d))
    e := make([]int, 3)
    fmt.Println(e)
    e[0] = 111
    fmt.Println(e)
    

    切片截取固定长度:

    s := []int{1,2,3,4,5}
    s[0:3:5]  // 从0到3,取左不取右,s的容量为 5,容量不能超过原来的切片的容量
    // 地址和原来的切片重合,是原来切片的一部分,还是原来的地址。所以修改切片的内容,会影响原来的。
    

    切片拷贝:

    	a := []int{1, 25, 5} // [1 25 5]
    	var c []int
    	b := make([]int, 1) 
    	copy(b, a)          // 存储两个地址 a -> b
    	copy(c, a)
    	fmt.Println(a)
    	fmt.Println(b) // 有几位填充几位  [1]
    	fmt.Println(c) // []
    

    切片当做函数参数,引用传递:

    但是,append函数,向切片中添加数据时,地址将可能发生改变,不影响实参的地址。相当于,如果内存够用,就用原来的;不够用了,就新开辟内存地址。但是原来的实参切片还在原来的地址。

  • 相关阅读:
    textarea内容随高度自适应
    2017年7月19日面试后记
    如何在django中设置用邮箱也可以登录?
    新闻网站项目笔记
    新闻网站项目django+rest framework api+vue.js+reqwest
    关于js的一些基本概念
    新闻网站项目django--个人资料页
    新闻网站项目django--注册页
    新闻网站项目django--登录页
    新网网站项目django--详情页
  • 原文地址:https://www.cnblogs.com/pythonwl/p/14598933.html
Copyright © 2011-2022 走看看