⑥ 指针
本文即将看到:
⚬ ------ 指针的声明
⚬ ------ 指针的操作
⚬ ------ 指针的指针
一、指针的声明
- 概念
指针是存储另一个变量的内存地址的变量。
- 声明
var name *type
空指针
● 当一个指针被定义后没有分配到任何变量时,它的值为 nil。
● nil 指针也称为空指针。
二、指针的操作
- 获取指针的值
& 符号: 取地址
* 符号: 取数据
- 操作指针改变变量的值
a := 10
var p1 *int
p1 = &a //p1指向a的地址
*p1 = 100 //改变a的值
fmt.Println(p1,*p1) // 0xc00000a0c8 10
fmt.Println(&a,a) //0xc00000a0c8 100
- 数组指针
//指针数组
arr := [4]int{1, 2, 3, 4}
var p *[len(arr)]int
p = &arr
fmt.Println(p) // &[1 2 3 4]
fmt.Println(*p) // [1 2 3 4]
fmt.Println(&p) // 0xc000006040
//修改数组内的数据
p[0] = 100 // 相当于(*p)[0] = 100
fmt.Println(*p) // [100 2 3 4]
- 使用指针传递函数的参数
func change(a *int){
*a = 50
}
func main(){
c := 20
fmt.Println(c)
change(&c) // 函数的参数是指针类型 &c传入c的地址
fmt.Println(c)
}
三、指针的指针 一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量。
func main() {
a := 10
var (
p1 *int //指针
p2 **int //指针的指针
)
p1 = &a
p2 = &p1
fmt.Println(a, &a) //10 0xc00006c090
fmt.Println(p1, &p1, *p1) //0xc00006c090 0xc000096018 10
fmt.Println(p2, *p2) //0xc000096018 0xc00006c090
fmt.Println( **p2, &p2) //10 0xc000096020
**p2 = 100 //操作指针改变a的值
fmt.Println(**p2) //100
//*p2 ->指向的是p1的数据 也就是p1指针指向的a的地址
fmt.Println(*p2) //0xc00006c090
fmt.Println(a) //100
}

浙公网安备 33010602011771号