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
    }
      

  • 相关阅读:
    ScrollView卷轴视图
    SharedPreferences数据存储
    progressBar进度条
    SeekBar拖动条
    TabWidget选择标签
    RadioGroupRadioButton
    SQLite数据操作
    Spinner
    .NET学习资源
    如何在局域网内其他机器访问我的asp.net网站?
  • 原文地址:https://www.cnblogs.com/puti306/p/11407668.html
Copyright © 2011-2022 走看看