最近在学习底层知识,一直在说,值类型,引用类型,指针类型,指针,指针变量,搞的迷迷糊糊的,感觉也是似懂非懂,现在系统的学习归纳整理一下。
a := 10
a是一个值类型的变量,因为a里面存储的是10,我们通过a可以直接取到 10 这个值
然后我们执行下面的代码
b := &a
b就是一个指针(类型)变量,该变量的值是地址,也就是说指针就是一个变量,只不过这个变量里面存储的是一个地址(指向内存),指针是一个实体。 引用是指跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。
对该地址进行取值(*)操作,可以获取指针变量指向的原变量的值
Go语言中的值类型(int float bool string array struct)都有对应的指针类型(*int,*int64,*string)等等
指针类型和引用类型的区别
我们通常说,channel,slice是引用类型,这些数据结构的本质是一个结构体,但是他们里面的某个属性存储是指针类型。
通常说一个变量是一个指针类型,这个时候和说他是int类型,布尔类型是相同的。只不过,指针类型里面存储的是地址,普通类型存储的是值。
综上所述
值类型 、引用类型:形容的是数据类型,int 是值类型,切片是引用类型,也可以说*int是引用类型
指针、指针类型 :形容的是一个变量,变量存储的是内存地址,变量是int类型,变量是int指针类型
指针变量 :该变量是指针