码迷,mamicode.com
首页 > 编程语言 > 详细

go语言-指针

时间:2019-08-25 14:14:08      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:str   就会   ace   ptr   特点   bool   ice   inter   float   

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

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语言-指针

标签:str   就会   ace   ptr   特点   bool   ice   inter   float   

原文地址:https://www.cnblogs.com/puti306/p/11407668.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!