Go语言指针
一、什么是指针
一个指针变量指向了一个值的内存地址。
二、基本介绍
- 基本数据类型的变量存的是值,也叫值类型
- 指针类型的变量存的是一个地址,这个地址指向的空间存的才是值。例如:var ptr *int
- 获取变量的地址,用&,例如:var num int,获取num的地址,&num
- 获取指针类型变量所指向的值,使用*,例如:var ptr *int,使用*ptr获取ptr指向的值。
例子:
package main
import "fmt"
func main() {
var i int = 10
fmt.Println("变量i的值=",i)
// 获取变量的地址用 &
fmt.Println("变量i的地址=",&i)
// 1.ptr是一个指针变量
// 2.ptr的类型是*int
// 3.ptr的值是&i,即为变量i的内存地址
var ptr *int = &i
fmt.Println("指针变量ptr的值=",ptr)
// 获取指针变量指向的值用 *
fmt.Println("指针变量ptr指向的值=",*ptr)
// 指针变量本身在内存中也有地址
fmt.Println("指针变量ptr本身得地址=",&ptr)
}
运行结果:
变量i的值= 10
变量i的地址= 0xc000086020
指针变量ptr的值= 0xc000086020
指针变量ptr指向的值= 10
指针变量ptr本身得地址= 0xc000088020
上述例子在内存中的示意图如下:
注意细节
- 值类型对应的都有指针类型,形式为:*数据类型,例如int对应的指针类型*int。
- 值类型包括,基本数据类型int系列,bool,string,struct,数组。