Hello,我是普通Gopher,00后男孩,极致的共享主义者,想要成为一个终身学习者。专注于做最通俗易懂的计算机基础知识类公众号。每天推送Golang技术干货,内容起于K8S而不止于K8S,涉及Docker、微服务、DevOps、数据库、虚拟化等云计算内容及SRE经验总结
=======================
初次见面,我为你准备了100G学习大礼包:
1、《百余本最新计算机电子图书》
2、《30G Golang学习视频》
3、《20G Java学习视频》
4、《90G Liunx高级学习视频》
5、《10G 算法(含蓝桥杯真题)学习视频》
6、《英语四级,周杰伦歌曲免费送!》
路过麻烦动动小手,点个关注,持续更新技术文章与资料!
关于Golang语言的指针与内存讲解
- 基本数据类型,变量存的就是值,也叫值类型
- 获取变量的地址,用&,比如:
var num int
,获取num的地址:&num
package main
import "fmt"
func main() {
// 基本数据类型在内存布局
var num int = 1
// num 的地址是什么, &num
fmt.Println("num的地址=", &num)
}
基本数据类型在内存的布局:
- 指针类型,指针变量存的是一个地址,这个地址指向的空间存的才是值
- 比如:
var ptr *int = &num
举例说明:指针在内存的布局
package main
import "fmt"
func main() {
// 基本数据类型在内存布局
var num int = 1
// num 的地址是什么, &num
fmt.Println("num的地址=", &num)
// 下面的 var ptr *int = &num
// 1. ptr是一个指针变量
// 2. ptr的类型 *int
// 3. ptr本身的值&num
var ptr *int = &num
fmt.Printf("prt=%v", ptr)
}
指针类型在内存的布局:
注意: ptr此时也是有地址的,
0xc00000a0a8
不过是ptr指针所指向的地址
获取指针类型所指向的值
使用:*
,比如:var ptr *int
,使用*ptr
获取ptr
指向的值
package main
import "fmt"
func main() {
// 基本数据类型在内存布局
var num int = 1
// num 的地址是什么, &num
fmt.Println("num的地址=", &num)
// 下面的 var ptr *int = &num
// 1. ptr是一个指针变量
// 2. ptr的类型 *int
// 3. ptr本身的值&num
var ptr *int = &num
fmt.Printf("prt=%v\n", ptr)
fmt.Printf("ptr的地址=%v\n", &ptr)
fmt.Printf("ptr指向的值 =%v", *ptr)
}
关于指针的一些知识点举例
不能使用非地址形式的变量定义指针
func main() {
var a int = 300
var ptr *int = a
fmt.Println(ptr)
}
类型不匹配
func main() {
var a int = 300
var ptr *float32 = &a
fmt.Println(ptr)
}
指针转换
func main() {
var a int = 300
var b int = 400
var ptr *int = &a
*ptr = 100
ptr = &b
*ptr = 200
fmt.Printf("a=%d, b=%d, *ptr=%d", a,b,*ptr)
}
a=100, b=200, *ptr=200
指针的使用细节
- 值类型,都有对应的指针类型,形式为
*
数据类型,比如int
的对应的指针就是*int
,float32
对应的指针类型就是*float32
,依次类推。 - 值类型包括:基本数据类型
int
系列,float
系列,bool
,string
、数组和结构体struct