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语言-指针的主要内容,如果未能解决你的问题,请参考以下文章