一 基本介绍
1 基本数据类型,变量存的就是值,也叫值类型。
2 获取变量的地址,用 & 。比如: var num int, 获取 num 的地址:&num。
分析一下基本数据类型在内存的布局。

3 指针类型,指针变量存的是一个地址,这个地址指向的空间存的才是值。
var ptr *int = &num4 获取指针类型所指向的值,使用:*,比如:var ptr *int, 使用 *ptr 获取 ptr 指向的值。
package main
import (
"fmt"
)
// 演示 golang 中指针类型
func main() {
// 基本数据类型在内存布局
var i int = 10
// i 的地址
fmt.Println("i的地址=", &i)
// ptr 是一个指针变量
// ptr 的类型 *int
// ptr 本身的值 &i
var ptr *int = &i
// 指针本身的值
fmt.Printf("ptr=%v\n", ptr)
// 指针的地址
fmt.Printf("ptr 的地址=%v", &ptr)
// 指针指向的值
fmt.Printf("ptr 指向的值=%v", *ptr)
}测试结果
i的地址= 0xc0420080a8
ptr=0xc0420080a8
ptr 的地址=0xc042004030ptr 指向的值=105 一个案例再说明

二 实战
1 要求
a 写一个程序,获取一个 int 变量 num 的地址,并显示到终端。
b 将 num 的地址赋给指针 ptr , 并通过 ptr 去修改 num 的值。
2 代码
package main
import "fmt"
func main() {
var num int = 9
fmt.Printf("num address=%v\n", &num)
var ptr *int
ptr = &num
*ptr = 10 // 这里修改时,会使 num 的值变化
fmt.Println("num =" , num)
}3 测试
num address=0xc04204c080
num = 10三 指针的使用细节
1 值类型,都有对应的指针类型, 形式为 * 数据类型,比如 int 的对应的指针就是 *int, float32 对应的指针类型就是 *float32, 依次类推。
2 值类型包括:基本数据类型 int 系列, float 系列, bool, string、数组和结构体 struct。
版权声明:本文为chengqiuming原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。