gor指针及内存布局

  • 基本数据类型,变量存的就是值,也叫值类型
  • 获取变量的地址,用&,比如: var num int, 获取 num 的地址:&num
  • 指针类型,指针变量存的是一个地址,这个地址指向的空间存的才是值,比如:var ptr *int = &num
  • 获取指针类型所指向的值,使用:*,比如:var ptr *int, 使用*ptr 获取ptr 指向的值
package main
import(
    "fmt"
    //"strconv"
)
//演示string转基本类型
func main(){
    var i int = 10
    fmt.Println("i 的内存地址=",&i)
    var ptr *int = &i
    //ptr是个指针变量
    fmt.Println("ptr指向的内存地址是(本身的值)=",ptr)
    fmt.Printf("ptr自己的内存地址是%v\n",&ptr)
    fmt.Printf("ptr的存的值(地址)指向的值是多少%v\n",*ptr)
}
image.png

指针的使用细节

  • 值类型,都有对应的指针类型, 形式为 *数据类型,比如 int 的对应的指针就是*int, float32
    对应的指针类型就是*float32, 依次类推。
  • 值类型包括:基本数据类型, int 系列, float 系列, bool, string, 数组, 结构体(struct)

值类型和引用类型的说明

  • 值类型:基本数据类型int 系列, float 系列, bool, string 、数组和结构体
  • 引用类型:指针、slice 切片、map、管道 chan、interface 等都是引用

值类型和引用类型的使用特点

  • 值类型:变量直接存储值,内存通常在中分配示

    image.png

  • 引用类型:变量存储的是一个地址,这个地址对应的空间才真正存储数据(值),内存通常在
    上分配,当没有任何变量引用这个地址时,该地址对应的数据空间就成为一个垃圾,由GC来回收

    image.png

  • 内存的的示意图

    m

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。