# 指针类型
每个变量在内存中都有对应存储位置(内存地址),可以通过&运算符获取。指针是用来存储变量地址的变量
1)声明
指针声明需要指定存储地址中对应数据的类型,并使用*作为类型前缀。指针变量声明后会被初始化为nil,表示空指针
var pointer01 *int
var pointer02 *float64
var pointer03 *string
fmt.Println("%T, %T, %T\n", pointer01, pointer02, pointer03)
fmt.Println(pointer01, pointer02, pointer03)
fmt.Println("%t, %t, %t\n", pointer01==nil,pointer02==nil, pointer03==nil)
/*
%T, %T, %T <nil> <nil> <nil>
<nil> <nil> <nil>
%t, %t, %t true true true
*/
2)初始化
a)使用&运算符+变量初始化:&运算符获取变量的存储位置来初始化指针变量
b)使用new函数初始化:new函数根据数据类型申请内存空间并使用零值填充,并返回申请空间地址
var (
age int = 30
heigh float64 = 1.68
motto string = "少年经不得顺境,中年经不得闲境,晚年经不得逆境"
)
// 指针变量初始化
pointer01, pointer02, pointer03 = &age, &heigh, &motto
pointer04, pointer05, pointer06 := &age, &heigh, &motto
pointer07, pointer08, pointer09 := new(int), new(float64), new(string)
// 打印变量地址
fmt.Println(&age, &heigh, &motto)
// 打印指针变量
fmt.Println(pointer01, pointer02, pointer03)
fmt.Println(pointer04, pointer05, pointer06)
fmt.Println(pointer07, pointer08, pointer09)
/*
0xc000014088 0xc0000140a0 0xc000046230
0xc000014088 0xc0000140a0 0xc000046230
0xc000014088 0xc0000140a0 0xc000046230
0xc0000140a8 0xc0000140b0 0xc000046240
*/
3)操作
可通过*运算符+指针变量名来访问和修改对应存储位置的值
fmt.Println(age, height, motto)
fmt.Println(*pointer01, *pointer02, *pointer03) // 通过指针变量访问位置存储的值
//通过指针变量访问修改存储的值
*pointer01 += 1
*pointer02 = 1.70
*pointer03 != "--周杰伦"
fmt.Println(*pointer01, *pointer02, *pointer03) // 通过指针变量访问位置存储的值
fmt.Println(age, heigh, motto) //打印变量值
fmt.Println(&age, &heigh, &motto)// 打印变量地址
fmt.Println(pointer01, pointer02, pointer03) // 打印指针变量
/*
30 1.68 少年经不得顺境,中年经不得闲境,晚年经不得逆境
30 1.68 少年经不得顺境,中年经不得闲境,晚年经不得逆境
31 1.7 少年经不得顺境,中年经不得闲境,晚年经不得逆境--周杰伦
31 1.7 少年经不得顺境,中年经不得闲境,晚年经不得逆境--周杰伦
0xc000014088 0xc0000140a0 0xc000046230
*/