go语言-指针

Posted puti306

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语言-指针相关的知识,希望对你有一定的参考价值。

    一、查看变量没内存地址:&变量名

var i int = 10   s := &i   fmt.Println(s) //内存地址:0xc000062080

 二、指针介绍

  1、定义一个指针,ptr是一个指针变量,类型是*int,先指向内存地址,内存地址里存着变量地址

  2、指针变量ptr存着变量j的内存地址>>通过变量j内存地址取j的值

  3、指针类型与值类型(变量类型)必须一致

var j int = 20
   var ptr *int = &j
   fmt.Println(ptr)   //指针变量prt存的值:0xc00000a0f0
   fmt.Println(&j)    //变量内存地址:0xc00000a0f0
   fmt.Println(&ptr)  //指针变量prt内存地址0xc00008e020
   fmt.Println(*ptr)   //指针变量ptr的值:20

 三、值类型与引用类型在内存上分配及注意点

  1、值类型与引用类型特点,编译会有逃逸分析,所以栈可能会在堆上,堆可能在栈上

  2、值类型:int系列,float系列,bool,数组和结构体struct--变量直接存储值,通常在栈中分配

  3、引用类型:指针,切片slice,map,管道chan,interface--变量存储的是一个地址,这个地址对应的空间存储值,通常在堆上分配

  4、当没有变量引用这个地址,该地址对应的数据空间就会成为一个垃圾,由GC回收

  四、案例

 案例1:取一个int变量,将地址赋值给指针ptr,通过ptr修改int变量的值
   var num = 11
   var ptr1 *int = &num
   *ptr1 = 21
   fmt.Println(num)

  

案例2:判断最后输出的内容是什么?
   var (
      a int = 300
      b int = 400
   )
   var ptr2 *int =&a
   *ptr2 = 100
   ptr2 = &b
   *ptr2 = 200
   fmt.Println(a,b,*ptr2)   //a=100,b=200,*ptr=200
  

以上是关于go语言-指针的主要内容,如果未能解决你的问题,请参考以下文章

Go语言基础之指针

go语言中指针的使用场景?

Go语言 | 03 数组指针切片用法

Go语言 | 03 数组指针切片用法

Go语言第十篇:Go数据结构之:指针

GO语言学习系列五——GO的控制语句(补充指针)