1.基本介绍
● 基本数据类型,变量存的就是值,也叫值类型
● 获取变量的地址,用&
● 指针类型,指针变量存的是一个地址,这个地址指向的空间存的才是值
● 获取指针类型所指向的值,使用*
var i int = 10
fmt.Println("i的地址=",&i)//i的地址= 0xc0000120a8
var ptr *int = &i
//ptr 是一个指针变量
//ptr 的类型是 *int
//ptr 本身的值 &i
//*ptr 取指向的地址的值
fmt.Printf("ptr=%v\n",ptr)//ptr=0xc0000120a8
fmt.Printf("ptr 的地址=%v\n",&ptr)//ptr 的地址=0xc000006030
fmt.Printf("ptr 指向的值=%v\n",*ptr)//ptr 指向的值=10
2.使用细节
● 值类型都有对应的指针类型,形式为 *数据类型
● 值类型包括:基本数据类型int系列,float系列,bool,string,数组和结构体struct
3.值类型和引用类型
● 值类型:基本数据类型int系列,float系列,bool,string,数组和结构体struct
○ 值类型:变量直接存储值,内存通常在栈中分配
● 引用类型:指针,slice切片,map,管道channal,interface
○ 引用类型:变量存储的是一个地址,这个地址对应的空间才是真正存储的数据,内存通常在堆中分配,当没有任何变量引用这个地址时,该地址对应的数据空间就成了一个垃圾,由GC来回收