文章目录
- GoLang之切片底层系列二(浅显学习)
-
- 1.slice介绍
- 2.slice的定义
- 3.slice切割共享问题
-
- 3.1问题如下
- 3.2解决方案
- 3.3注意点
- 4.对切片使用&
- 5.对切片使用*
- 6.对切片使用%p
- 7.对切片元素使用&
- 8.指针切片
- 9.切片指针
GoLang之切片底层系列二(浅显学习) 注:本文以Windos系统上Go SDK 1.18进行讲解
1.slice介绍
文章图片
文章图片
2.slice的定义 3.slice切割共享问题 3.1问题如下
文章图片
3.2解决方案
文章图片
3.3注意点
文章图片
4.对切片使用&
func main() {
var a = []int{1, 4}
fmt.Println(&a)//&[1 4]
fm5t.Printf("%p", a) //0xc0000160b0
}
5.对切片使用*
func main() { var a = []int{1, 4}
var p *[]int
p = &a
fmt.Println(*p) //输出:[1 4]
}
6.对切片使用%p
func main() {
a := []int{1, 2, 3}
fmt.Printf("%p\n", &a) //0xc000096060
}
7.对切片元素使用&
func main() {
a := []int8{1, 2, 3}
fmt.Printf("%p\n", &a)
fmt.Println(&a[0])
fmt.Println(&a[1])
fmt.Println(&a[2]) b := []int16{1, 2, 3}
fmt.Printf("%p\n", &b)
fmt.Println(&b[0])
fmt.Println(&b[1])
fmt.Println(&b[2])
/*
0xc000004078
0xc000016098
0xc000016099
0xc00001609a0xc000004090
0xc0000160d0
0xc0000160d2
0xc0000160d4
*/
}
func main() {
a := []int8{1, 2, 3}
fmt.Printf("%p\n", a)
fmt.Println(&a[0])
fmt.Println(&a[1])
fmt.Println(&a[2]) b := []int16{1, 2, 3}
fmt.Printf("%p\n", b)
fmt.Println(&b[0])
fmt.Println(&b[1])
fmt.Println(&b[2])
/*
0xc000102058
0xc000102058
0xc000102059
0xc00010205a0xc000102090
0xc000102090
0xc000102092
0xc000102094
*/
}
8.指针切片
func main() {
var a = []int{1, 4}
p := make([]*int, 3)
p[0] = &a[0]
fmt.Println(*p[0]) //输出:1
}
文章图片
9.切片指针
func main() {
var stack *[]int
fmt.Println(stack) //输出:
if stack == nil {
fmt.Println("yes") //输出:yse
} else {
fmt.Println("no")
}
}
文章图片
func main() {
var a = []int{1, 4}
var p *[]int
p = &a
fmt.Println((*p)[1])//输出:4
}
文章图片
但是数组可以使用
func main() {
var a = [3]int{1, 4}
var p *[3]int
p = &a
fmt.Println(p[1]) //输出:4
}
func main() {
var a = [3]int{1, 4}
var p *[3]int
p = &a
fmt.Println((*p)[1]) //输出:4
}
推荐阅读
- 开发语言|Docker部署深度学习
- JavaEE|文件操作和IO
- Python|Python(列表浅层快速掌握 —— 创建、访问、增加、删除、修改、统计及计算)
- 在从Golang Buffalo webapp发送推文时设置CSRF令牌时遇到问题
- applycall和bind的简单学习
- python|使用Python成功调用大漠插件方法
- JavaSE|Java关键字(四)(abstract)
- JavaSE|Java-接口(一篇讲透)
- 学习 APPIUM 元素定位 (JAVA)-xpath