本节学习目标
- 1.什么是指针
- 2.指针的零值
- 3.解引用的用法
- 4.不要使用指针传递数组,应该使用切片
什么是指针?
指针是一种存储变量内存地址(Memory Address)的变量
例如变量 a 的值是123 ,123存储的内存地址为0x123456,则我们定义一个指针类型的变量b,让它的值为0x123456,那么我们去这块物理内存的值时,就能得到123
下面我们用代码演示一下上面的过程
package main
import "fmt"
func main(){
a := 124
fmt.Println(&a) // 查看a的地址
}
下面我们定义一个指针类型
package main
import "fmt"
func main(){
a := 124
fmt.Println(&a) // 查看a的地址
var b *int = &a
fmt.Println(b)
}
接下来 我们取地址下面的值
package main
import "fmt"
func main(){
a := 124
fmt.Println(&a) // 查看a的地址
var b *int = &a
fmt.Printf("地址:%x,对应的值为:%d/n",b,*b)
}
指针的零值
var b *int
fmt.Println(*b)
指针b执行的地址 是nil,这个时候通过*b去取值,会发生错误如上图,那么我们正确的操作应该怎么办?
package main
import "fmt"
func main(){
var b *int
if(b==nil){
fmt.Println("b是一个空指针")
}else{
fmt.Println(*b)
}
}
解引用
package main
import (
"fmt"
)
func main() {
b := 255
a := &b
fmt.Println(a)
fmt.Println(*a)
}
怎么通过指针修改b的值呢?
package main
import "fmt"
func main(){
b := 255
a := &b
fmt.Println(a)
fmt.Println(*a)
*a += 5
fmt.Println(b)
}
不用向数组传递数组的指针,应该使用切片
import "fmt"
func main(){
array := [3]int{1,2,3}
change(&array)
fmt.Println(array)
}
func change(array *[3]int){
array[1] = 10
}
注意array[1] = 10,为什么不写成 array[1] = 10?
答:a[x] 是 (a)[x],当然
我们看一种更加优雅的写法
import "fmt"
func main(){
array := [3]int{1,2,3}
change(array[:])
fmt.Println(array)
}
func change(array []int){
array[1] = 10
}
网友评论