Golang:指针以及内存布局

Posted 保暖大裤衩LeoLee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang:指针以及内存布局相关的知识,希望对你有一定的参考价值。

任何值类型,都有对应的指针类型,形式为 *[数据类型],比如int对应的指针类型为 *int,float64对应的指针类型为 *float64。

值类型包括:基本数据类型、string、数组、结构体struct。都有对应的指针类型。

直接看示例代码:

//基本数据类型的内存布局
var i8 int8 = 10
//i的内存地址
fmt.Printf("i8的内存地址:%v,&i8的类型:%T\\n", &i8, &i8)
var ptr *int8 = &i8
fmt.Printf("ptr的值:%v,ptr的内存地址:%v,ptr的类型:%T\\n", ptr, &ptr, ptr)
//根据指针类型获取真正的值,使用*来获取
fmt.Printf("real value:%d\\n", *ptr)

//i8的内存地址:0xc00000a098,&i8的类型:*int8
//ptr的值:0xc00000a098,ptr的内存地址:0xc000006030,ptr的类型:*int8
//real value:10

&可以获取变量的地址、通过*可以访问指针指向的内存空间。

从上述代码可以得出下图:

  • i8的值为10
  • i8的内存地址为:0xc00000a098
  • ptr的值为:0xc00000a098
  • ptr的内存地址为:0xc000006030

可以得出:指针变量存储的是一个地址,这个地址指向的内存空间才是真正存储的值

 既然可以通过指针来访问指向的内存空间,那么就可以通过指针修改指向的内存空间:

 未完待续~~~

以上是关于Golang:指针以及内存布局的主要内容,如果未能解决你的问题,请参考以下文章

golang代码片段(摘抄)

#yyds干货盘点#带大家认识Golang中的切片数据类型

Golang指针

Java对象的内存布局以及对象的访问定位

golang 转到片段以观察运行时行为和内存分配

golang unsafe.Pointer使用原则以及 uintptr 隐藏的坑