美文网首页
数组和切片区别

数组和切片区别

作者: jsqwj | 来源:发表于2019-10-06 19:53 被阅读0次
package main
 
import (
    "fmt"
    "unsafe"
    "reflect"
)

func main() {
    a := [10]int{1,2,4}
    b := make([]int, 10,100)
    copy(b, a[:10])
    test(b)
    c:=b
    fmt.Printf("%d  %d\n",(*reflect.SliceHeader)(unsafe.Pointer(&c)).Data, (*reflect.SliceHeader)(unsafe.Pointer(&b)).Data)
    c = append(c, 100)
    b = append(b, 200)
    fmt.Printf("%d  %d\n",(*reflect.SliceHeader)(unsafe.Pointer(&c)).Data, (*reflect.SliceHeader)(unsafe.Pointer(&b)).Data)
    fmt.Println(c,b)
}

func test(a []int){
    a[0] = 99
}

824634302464  824634302464
824634302464  824634302464
[99 2 4 0 0 0 0 0 0 0 200] [99 2 4 0 0 0 0 0 0 0 200]


当 b := make([]int,10)时候,
824633843792  824633843792
824634310656  824634310816
[99 2 4 0 0 0 0 0 0 0 100] [99 2 4 0 0 0 0 0 0 0 200]
  1. 数组赋值会直接拷贝一份,而切片赋值会传指针。
  2. 函数传参,同上
  3. 当切片append的时候,go会考虑切片的cap值,如果超过了当前cap值,则可能会对整个切片进行拷贝一份,并且进行扩容。所以会导致很多异常的情况。

相关文章

  • Golang数组和切片的区别

    Golang数组和切片的区别 大纲 数组是固定大小 切片不是动态数组,可以扩容 区别 定义方式不一样 初始化方法不...

  • 数组和切片区别

    数组赋值会直接拷贝一份,而切片赋值会传指针。 函数传参,同上 当切片append的时候,go会考虑切片的cap值,...

  • 集合

    数组和切片 创建切片跟创建数组唯一的区别在于 Type 前的“ [] ”中是否有数字,为空,则代表切片,否则则代表...

  • 《利用pyhton进行数据分析》笔记-Numpy(二)

    1.数组的索引和切片(可类比于list的索引和切片,注意区别) 数组选取数据子集或单个元素的方式有很多。一维数组跟...

  • <>

    数组和切片 切片和数组的区别 数组是属于值类型。结构体,基础类型数据也属于值类型。 注意GO语言对于“传值和传引用...

  • numpy之索引和切片

    索引和切片 一维数组 一维数组很简单,基本和列表一致。它们的区别在于数组切片是原始数组视图(这就意味着,如果做任何...

  • 数组和切片

    数组和切片的区别 //数组,需要固定长度的 a=[5]int //切片是不需要固定长度的 b=[]int pack...

  • golang入门到放弃:3.数组、切片、map

    数组 切片 数组和切片的区别 数组必须要指定长度,如果定义时不指定长度,go语言也会根据元素中的个数自动设置值数组...

  • Go数组和切片区别

    数组是值传递,切片是引用传递 切片可扩容 切片多一个cap属性 切片底层用数组实现

  • 数组切片总结

    一句话总结:切片是动态数组。数组需要明确指定大小,切片不需要。数组是值传递,切片是地址传递。 区别 初始化 数组需...

网友评论

      本文标题:数组和切片区别

      本文链接:https://www.haomeiwen.com/subject/ggtppctx.html