zoukankan      html  css  js  c++  java
  • 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
    }
      

  • 相关阅读:
    springboot +mybatis 使用PageHelper实现分页,并带条件模糊查询
    jQuery设置点击选中样式,onmouseover和onmouseout事件
    Ajax跨域设置
    Java获取文章的上一篇/下一篇
    Python str / bytes / unicode 区别详解
    Python bytes 和 string 相互转换
    Python bytearray/bytes/string区别
    Python eval 与 exec 函数区别
    Python eval 与 exec 函数
    Python set list dict tuple 区别和相互转换
  • 原文地址:https://www.cnblogs.com/puti306/p/11407668.html
Copyright © 2011-2022 走看看