【Go语言基础学习一】 指针和地址

Go语言基础学习 指针和地址

有几个很不错的学习教程,感觉很不错

最后就是go官网了

指针和地址

上来咱就讲指针和地址,go各种数据类型,字符串,数组,map看看语法,多敲敲

可以参考下知乎问题为什么要有指针

我现在的理解就是, 指针通俗来讲就是内存地址,直接通过内存地址修改某个值,这是最直接,也是效率最高的。

下面是练习指针代码,给指针赋值地址 通过地址取值

package main

import "fmt"

func main() {
    a := 123
    fmt.Println(a)
    var b *int // 定义b为指针类型
    b = &a     // & 取地址符号
    *b = 666   // 表示的就是值
    fmt.Println(a, &a, b, *b, &*b)
    // 函数传入地址, 函数内部可以修改值
    changeA1(&a)
    fmt.Println(a) // 777
    changeA2(a)
    fmt.Println(a) // 还是777 不会变成888
    // 同理其他 数据类型 数组 map struct等 可以定义指针

}

func changeA1(z *int) {
    *z = 777
}

func changeA2(n int) {
    n = 888
}

复杂数据类型的指针

package main

import (
    "fmt"
)


func main() {
    a := [3]string{"a", "b", "c"}
    // 定义一个数组指针 外部是一个指针 内部是元素
    var b *[3]string

    b = &a
    // 先通过*b取出array值 然后修改 array里面的值
    (*b)[0] = "zzz"

    fmt.Println(a)

    c := [3]string{"q", "w", "e"}

    // 定义一个指针数组 外部是array 里面元素是指针
    d := [3]*string{&c[0], &c[1], &c[2]}
    fmt.Println(c)
    *d[0] = "qqqqq"
    fmt.Println(d, *d[0])
    fmt.Println(c)

    // 定义一个map key为值 value为 字符串指针
    e := map[string]*string{}
    f := "r"
    e["a"] = &f
    fmt.Println("e是", e)

    // 定义一个map key value都为 字符串指针
    g := map[*string]*string{}
    h := "t"
    i := "y"
    // 字符串指针 key赋予地址 value也赋予地址
    g[&h] = &i
    fmt.Println("g是", g, "取value值", *g[&h])
}

结构体指针

package main

import "fmt"

// 定义一个结构体
type Cat struct {
    name string
    color string
    sex bool
}


func main() {
    // 实例化
    tom := Cat{
        name:"Tom",
        color:"white",
        sex: true,
    }
    fmt.Println(tom)

    // 定义一个结构体指针
    var tom2 *Cat
    // 地址赋值给结构体指针
    tom2 = &tom

    fmt.Println(tom)
    // 结构体指针改变 值
    (*tom2).name = "old tom"

    fmt.Println(tom)
}

文章作者: 王小右
版权声明: 咳咳想白嫖文章?本文章著作权归作者所有,任何形式的转载都请注明出处。 https://www.charmcode.cn !
  目录