go语言的 slice切片不是纯引用类型

栏目: Go · 发布时间: 6年前

内容简介:如果改变了原本的值,切片的值也会跟着变,如果改变了切片的值,原本的值也会跟着变,所以有指针特性。

总结

如果改变了原本的值,切片的值也会跟着变,

如果改变了切片的值,原本的值也会跟着变,

所以有指针特性。

go语言的slice是并不是纯引用类型,而是一种包含指针的聚合类型,类似

type IntSlice struct{
    ptr *int
   len int
   cap int
}

因为类似struct,所以还是值传递

样例1·

测试程序

package main
 
 import "fmt"
 
 func main(){
 
         a :=[...]int{0,1,2,3,4,5,6,7,8,9}
         fmt.Println(a)
 
         s1:=a[:]
         s2:=s1[:]
         fmt.Println(s1)
         fmt.Println(s2)
 
         fmt.Println("")
         fmt.Println("-------------------------------")
         fmt.Println("")
         
         a[9]=10
         s2[0]=100
         fmt.Println(a)
         fmt.Println(s1)
         fmt.Println(s2)
 
 }

输出

[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]

-------------------------------

[100 1 2 3 4 5 6 7 8 10]
[100 1 2 3 4 5 6 7 8 10]
[100 1 2 3 4 5 6 7 8 10]

分析

0全变100了

9全变10了

样例2

测试程序

package main

import "fmt"

func add1(s []int,x int) []int{
    s=append(s,x);
    return s

}
func add2(s []int,x int){
    s=append(s,x);
}

func main(){
    
    a :=[...]int{0,1,2,3,4,5,6,7,8,9}
    fmt.Println(a)
    
    s1:=a[5:8]//len=3 cap=5
    fmt.Println(s1)
    
    add2(s1,0)
    fmt.Println(a)
    fmt.Println(s1)
    
    add2(s1,1)
    fmt.Println(a)
    fmt.Println(s1)

}

输出

[0 1 2 3 4 5 6 7 8 9]
[5 6 7]
[5 6 7]
[0 1 2 3 4 5 6 7 0 9]
[5 6 7]
[0 1 2 3 4 5 6 7 1 9]

分析

数组的 8依次变成了 0、1

但slice s1始终没变

说明slice并不是纯引用类型


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

离散数学及其应用(原书第7版)

离散数学及其应用(原书第7版)

Kenneth H. Rosen / 徐六通、杨娟、吴斌 / 机械工业出版社 / 2015-1-1 / 129

《计算机科学丛书:离散数学及其应用(原书第7版)》是介绍离散数学理论和方法的经典教材,已经成为采用率最高的离散数学教材,被美国众多名校用作教材,获得了极大的成功。中文版也已被国内大学广泛采用为教材。作者参考使用教师和学生的反馈,并结合自身对教育的洞察,对第7版做了大量的改进,使其成为更有效的教学工具。《计算机科学丛书:离散数学及其应用(原书第7版)》可作为1至2个学期的离散数学课入门教材,适用于数......一起来看看 《离散数学及其应用(原书第7版)》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具