Adminxe's Blog | 低调求发展 - 潜心习安全 ,技术永无止境 | 谢谢您对本站的支持,有什么问题或者建议请及时联系:点击这里给我发消息

Go语言学习-指针

安全开发 MoCo, MoCo 204℃ 0评论

指针

Go语言中不存在指针操作,只需要记住两个符号

1.&:取地址

2.*:根据地址取值

package main

import "fmt"

// vscode  不支持  go module
//  pointer
func main() {
    //1.&:取地址

    n := 18
    p := &n //  n存的是一个值    而p则是存了n的内存地址  p本身也有一个内存地址
    fmt.Println(p)
    fmt.Printf("%T\n", p) //%T查看类型
    //*int:int类型的指针
    //指针:指向内存地址的一个东西,可以理解为就是个内存地址
    //2.*:根据地址取值
    m := *p
    fmt.Println(m)
    fmt.Printf("%T\n", m)
}

总结: 取地址操作符&和取值操作符*是一对互补操作符,&取出地址,*根据地址取出地址指向的值。

变量、指针地址、指针变量、取地址、取值的相互关系和特性如下:

  • 对变量进行取地址(&)操作,可以获得这个变量的指针变量。
  • 指针变量的值是指针地址。
  • 对指针变量进行取值(*)操作,可以获得指针变量指向的原变量的值。

Make和new区别

package main

import "fmt"
func main() {
   
    //new
    var a1 *int // nil  pointer
    fmt.Println(a1)
    var a2 = new(int) // new 函数 申请一个内存地址
    fmt.Println(a2)
    fmt.Println(*a2)
    *a2 = 100
    fmt.Println(*a2)

    // make
    //make 和new都是用来申请内存的
    //new很少用,一般用来给基本数据类型申请内存,string\int,返回的是对应的类型的指针
    //make是用来给slice、map、chan申请内存的,make函数返回的是对应的这三个类型的本身

    
}

参考链接

https://www.liwenzhou.com/posts/Go/07_pointer/

转载请注明:Adminxe's Blog » Go语言学习-指针

喜欢 (1)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址