- 值类型-变量存的是值本身:基本数据类型 int系列,float系列,bool,string,数组和结构体,值类型都有对应的指针类型(形式为:*数据类型)
- 引用类型-变量存的是内存地址:指针,slice,map,channel,interface等都是引用类型
1、获取变量的地址,用&,
var num int = 10
fmt.Println("num的内存地址是:",#)
2、指针类型,指针变量存的是一个内存地址,这个地址指向的内存空间保存的才是具体值
var num int = 10
var ptr *int
ptr = #
// 以上两行,可以写成var ptr *int = #
ptr 是一个变量名称,指针变量
ptr的类型是*int // *代表指针
# 获取变量num的内存地址
ptr 这个指针变量保存的就是变量num的内存地址
3、获取指针类型变量所指向的值,用*,格式: *指针变量 (即*指针地址)
fmt.Printf("prt 指向的值是%v", *ptr)
要区分指针类型和取值操作。
4、创建指针的另一种方法-new()函数
new()函数会在堆上分片一块内存空间,并返回这块内存的地址
s = new(string)
fmt.Println(s) // 内存地址
*s = "tom" // 内存存值
fmt.Println(*s) // 取值
// 等价于
var s string
s = "tom"
ss := &s
fmt.Println(*ss)