指 针
指针: 存储另一个变量的内存地址的变量; Go语言的取地址符号也是&
1. 声明指针: var needle_name *type
var b int = 10
var a *int = &b // 整型指针a,指向变量b(即存储b的内存地址)
使用 *a 获得其所指向的变量b的值10, 可以通过指针改变变量的值: *a++, 然后b的值就变成了11.
2. 结构体的定义和使用:
type name int8 // 结构体中成员变量的类型可以在结构体定义外指定type first struct { // 这里的结构体名为first a int b bool // bool类型的变量默认值为false name } var a = first{1, false, 2} // 定义first结构体类型的变量a a.a = 0 var b *first = &a //定义first类型的指针b
注意: 此时b.a和(*b).a都可以获取a.a的值 0 !
而&a的打印结果为: &{0 false 2} //就是没有逗号comma分隔符!!!
3. 当一个指针被声明但却没有为其赋值时,它就是一个空指针,值为 nil; 一个指针变量通常缩写为 ptr。
4. 指针作为参数传递: 因为指针存的是一个变量的地址,所以使用实参指针和形参指针都可以改变变量的值。 虽然可以将数组的地址传递给一个函数的参数(指针数组)并对其进行修改,但这并不是实现这一目标的惯用方法。 我们有切片!!!
5. 指针的指针: var ptr **int // 则指针 ptr 可以存储另一个指针的地址 (对应 ptr)