Go语言的指针
基本数据类型: 变量存储的就是值,也叫值类型
指针: 数据在内存中的地址称为指针
指针变量:指针变量存储的是一个地址,地址指向的内存空间存放的是值
// 定义一个基本数据类型
var num int = 18
// 通过 &num 获取 num 的地址
fmt.Println("num的地址是",&num)
// 定义一个指针变量存储 num 的地址 *指示这是一个指针变量
var ptr *int = &num
// 查看ptr的数据类型,结果为 *int
fmt.Printf("prt的数据类型是 %T \n",ptr)
// 查看ptr的地址
fmt.Println("ptr的地址为",&ptr)
//查看ptr所存的地址指向的值 通过*ptr取值
fmt.Println("ptr所存的地址指向的值是",*ptr)
指针的使用细节
值类型都有对应的指针类型,形式为 数据类型 ,如int类型的指针类型就是int
值类型和引用类型
什么是值类型:
变量直接存储值,内存直接分配在栈中
什么是引用类型:
变量存储的是一个地址,这个地址对应的空间才是正常存储的数据,内存通常在堆上分配,当没有任何变量引用这个地址时,该地址就变成一个垃圾,有GC回收
值类型: 基本数据类型,包括int系列、float系列、bool、string、数组、结构体
引用类型:指针、slice、map、chan(管道)、interface等都是引用类型