美文网首页
go语言指针类型和值类型区别

go语言指针类型和值类型区别

作者: 云龙789 | 来源:发表于2020-06-14 12:02 被阅读0次

1.类型的区分

指针类型: map、sclice 和 channel,他们的空值都是 nil,
值类型:比如 int、数组等

2.引用类型和值类型的区别

1.引用类型被多个变量接收后,表示的都是同一个内存地址,
改变任何一个变量值,相当于改了所有变量值
2.值类型被多个变量接收后,表示的都是各自的内存地址,
改变任何一个变量值,相当于改了自己变量的值
指针类型保存的是地址,值类型保存的是具体的值

2.1 demo

// 引用类型
func main() {
    scores := []int{1, 2, 3, 4, 5}
    scores[0] = 100
    b := scores
    b[1] = 200
    c := scores
    c[2] = 300
    fmt.Println(scores)
    fmt.Println(b)
    fmt.Println(c)

    fmt.Printf("%p\n", &scores)
    fmt.Printf("%p\n", &b)
    fmt.Printf("%p\n", &c)
}
// 值类型
func main() {
    a := 123
    b := a
    c := b
    a = 1
    b = 2
    c = 3
    fmt.Println(a)
    fmt.Println(b)
    fmt.Println(c)

    fmt.Printf("%p\n", &a)
    fmt.Printf("%p\n", &b)
    fmt.Printf("%p\n", &c)
}
引用类型结果
值类型结果

3.make 和 new 初始化的区别

1.new 用来分配除了引用类型之外的其他类型内存
2.make 来分配指针类型的数据内存
3. new  初始化仅仅是分配了一段内存
4.我们拿切片来举例 make 的作用
切片的本质是内存的一部分。初始化的时候,我们必须要为一个底层数组分配一段内存,同时也要初始化这个切片
长度是切片的长度,容量是底层数组的长度。所以 new 是不具备这个功能的,不能给 指针类型 数据初始化

demo

 new(X) 的结果与 &X{} 相同。
goku := new(Saiyan)
// 等同于
goku := &Saiyan{}

4.引用类型的一些特点

  • 1.必须先使用 make 初始化数据,才能对数据做出修改,因为初始化了,才会分配内存

  • 2.引用类型本质上是操作内存地址对应的值,所以如果将这个数据赋值给多个变量后,任何一个变量改变值,改变的是所有变量的数据

func main() {
    scores := []int{1, 2, 3, 4, 5}
    scores[0] = 100
    b := scores
    b[1] = 200
// scores[1]  的值也是200
    fmt.Println(scores) // [100 200 3 4 5]
    fmt.Println(b) // [100 200 3 4 5]
}

相关文章

  • go语言指针类型和值类型区别

    1.类型的区分 2.引用类型和值类型的区别 2.1 demo 3.make 和 new 初始化的区别 demo 4...

  • Go 语言程序设计——集合类型(1)

    Go语言的所有内置类型:数组、切片和映射 值、指针和引用类型 值在传递给函数或者方法的时候会被复制一次 Go语言中...

  • 4 Go特种类型:值、指针、引用及nil

    一、值、指针类型及引用类型 在Go中,一个变量持有的内容无非三种:值类型、指针类型及引用类型。值类型和指针类型可以...

  • go语言指针类型的使用

    go语言的指针类型 简单地说go语言的指针类型和C/C++的指针类型用法是一样的,除了出去安全性的考虑,go语言增...

  • Learning Go(1)

    Go是面向接口和函数式编程的语言; Go只有值类型和指针类型 在写可调用方法时,方法名要大写; “=”和“:...

  • golang实战笔记

    golang实战笔记 一、集合类型 1.值指针和引用类型a、go语言变量持有相应的值,列外:通道、函数、方法、映射...

  • <>

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

  • GO语言基础(三)

    指针 Go 拥有指针。指针保存了值的内存地址。 类型 *T 是指向 T 类型值的指针。其零值为 nil。 & 操作...

  • unsafe包

    go语言的指针类型分为三种:(1)普通指针类型:*类型,用于存储地址,不能进行指针运算(2)通用指针类型:用于转换...

  • (十四)golang unsafe.Pointer

    golang 的指针Go语言是个强类型语言。也就是说Go对类型要求严格,不同类型不能进行赋值操作。指针也是具有明确...

网友评论

      本文标题:go语言指针类型和值类型区别

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