golang的指针和切片
首先为什么要讲go的指针和切片放在一起?
因为go指针和切片都是引用类型
引用类型就是说切片和指针保存的只是内存的地址,而不是具体的值,效率在大数据读取方面效率会高很多。
1、怎么定义一个切片
方法1:
var a []int
a = make([]int, 0)
//给切片赋值
a[0] = 100
注意,这种方式需要对切片进行初始化,否者这个切片不能被使用
方法2:
var a []int = make([]int, len)
切片的使用和数组一样
a[0] = 100
fmt.Println(a)
2、怎么定义一个指针
方法1
var p *string
p = new(string)
*p = "abc"
方法2
var str string = "hello"
p = &str
下面是一个例子
func test() { //定义一个切片 var a []int //给a分配一个内存(初始化) a = make([]int, 10) //给切片赋值 a[0] = 100 fmt.Println(a) //定义一个切片类型的指针 var p *[]int //给指针初始化 p = new([]int) //给切片初始化,分配一个切片内存 (*p) = make([]int, 10) //给切片赋值 (*p)[0] = 100 fmt.Println(p) p = &a (*p)[0] = 1000
(*p)[1] = 10
(*p)[2] = 11
(*p)[3] = 12
(*p)[4] = 13
fmt.Println(a)
fmt.Printf("len is %d\n", len(a))
for i := 0; i < len(a); i++ {
fmt.Printf("num is %d\n", a[i])
}
}
func main() {
test()
}
这个例子一定要注意的是当指针赋值的是切片类型,那么指针和切片都需要做初始化,否则会报错