1. 基本介绍
- 在 第6节 Go的数据类型 中我们介绍过基本数据类型,变量中存在的就是值,所以被称为值类型
func main() {
var a = 64
fmt.Printf("a的值为: %v, a的类型为: %T\n", a, a)
}
- 如何获取一个变量的内存地址?使用
&号来获取
package main
import "fmt"
func main() {
var a int = 43
// a变量的内存地址=0xc0000b0008
fmt.Printf("a变量的内存地址=%v\n",&a)
}
- 基本数据类型在内存空间的布局是什么样的?
2. 什么是指针
指针类型:指针变量存的是一个地址,这个地址指向的内存空间才是值。这点和 Java 的引用类型是一个道理。
2.1 指针类型的声明
var a int = 32
// 声明指针变量
var p *int
// 指针变量赋值
p = &a
2.2 获取指针变量指向的具体值
语法: * 指针变量名
package main
import "fmt"
func main() {
var a int = 43
// 声明指针变量
var p *int
// 赋值
p = &a
// 指针p=0xc000132008,指针的值=43
fmt.Printf("指针p=%v,指针的值=%v\n",p, *p)
}
- 修改指针的值
func main() {
var a int = 43
// 声明指针变量
var p *int
// 赋值
p = &a
// 指针p=0xc000132008,指针的值=43
fmt.Printf("指针p=%v,指针的值=%v\n",p, *p)
// 指针p=0xc000128008,指针的值=30
*p = 30
fmt.Printf("指针p=%v,指针的值=%v\n",p, *p)
}
3. 指针使用细节
- 所有的值类型变量都会有对应的指针类型,比如:所有的 int 、float 类型、bool、string、数组 和 结构体 struct
| 值类型 | 指针类型 |
|---|---|
| int | * int |
| float32 | * float32 |
| float64 | * float64 |
| bool | * bool |
| string | * string |