go语言指针
go语言作为静态编译型语言,具有指针类型,但是不提供对指针的移位危险操作,防止指针的越界等问题。
go语言的指针的值复制与地址复制
数组
作为函数参数调用和复制均为值传递
package main
import "fmt"
//测试go语言数组slice调用时进行值传递还是地址传递
值传递
func main() {
arr:= [5]int{1,2,3,4,5}
test(arr)
fmt.Println(arr)
}
func test(arr [5]int) {
arr[0] += 5
}
地址传递
func main() {
arr:=[5]int{1,2,3,4,5}
test(&arr)
fmt.Println(arr)
}
func test(arr *[5]int) {
arr[0]+=5
}
slice
slice直接赋值和地址赋值都为指针操作
//slice的值传递与地址传递
func main() {
arr := [5]int{1,2,3,4,5}
slice := arr[0:5]
test(slice)
fmt.Println(slice)
fmt.Println(arr)
}
func test(s []int) {
s[0] += 5
}
上下两种类似
func main() {
arr := [5]int{1,2,3,4,5}
slice := arr[0:5]
test(&slice)
fmt.Println(slice)
fmt.Println(arr)
}
func test(s *[]int) {
(*s)[0] += 5
}
网友评论