From 35dbaf9dd8e84dbabf577efaeaa257dcc2123689 Mon Sep 17 00:00:00 2001 From: Tinywan <756684177@qq.com> Date: Sat, 26 May 2018 10:56:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=B1=E5=85=A5=E8=A7=A3=E6=9E=90=20Go=20?= =?UTF-8?q?=E4=B8=AD=20Slice=20=E5=BA=95=E5=B1=82=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/golang_tutorial_11.md | 177 +++++++++++++++++++++++++++++++++++++ 1 file changed, 177 insertions(+) diff --git a/docs/golang_tutorial_11.md b/docs/golang_tutorial_11.md index 03d0cd2..37ca838 100644 --- a/docs/golang_tutorial_11.md +++ b/docs/golang_tutorial_11.md @@ -660,5 +660,182 @@ func main() { 我(原文作者)已经将我们讨论的所有概念汇总到一个程序中,你可以从 [github](https://github.com/golangbot/arraysandslices) 下载。 +## 扩展 + +#### 数组 +[深入解析 Go 中 Slice 底层实现](https://halfrost.com/go_slice/) +###### 创建(定义)数组 +数组在Go中是值类型,而不是引用(其他语言的数组则是引用类型) +PS:切片(slice)是一个引用类型 +数组不是统一的类型,大小不同的数组是不可以比较的 +不同数组类型是不可以比较的 +```golang +var a[2]int +var b[3]string + +// 提前知道数组中的值 +var a[2]int{11,22} +var a[20]int{19:11} // 索引值为19的元素赋值为 11 ,其他的默认为 0 + +// 不指定数组的长度 ... +var c = [...]int{11,22,33,44} +var d = [...]int{19:90} // 尽可能的满足索引值得数组 +``` + +###### 指向数组的指针和指向指针的数组 + +```golang +//定义数组a +a := [...]int{19:100} + +// 指向数组的指针 +var p *[20]int = &a //长度为20的int型数组,这里的数组长度`20`必须和a数组长度相等 +fmt.Println(p) //以上表示取这样一个数组的地址 +// 打印结果:&[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19] + +//指向指针的数组 +x , y := 1, 2 +pp := [...]*int{&x,&y} // 指向int型的指针,保存的元素是指向int型的指针。输出x,y的地址: +fmt.Println("pp is ",pp) // 打印结果:pp is [0xc420012128 0xc420012130] +``` +###### new 创建一个数组 + +```golang + ppp := new([10]int) +fmt.Println("----ppp-------",ppp); //输出结果:`&[0 0 0 0 0 0 0 0 0 0]` +//以上为指向数组的指针 +``` + +###### 两种方式修改数组赋值 + +```golang +// 第一种方式 +n := [10]int{} +n[1] = 10 +fmt.Println("-----1------",n) // 输出:`[0 10 0 0 0 0 0 0 0 0]` + +// 第二种方式 +m := new([10]int) +m[1] = 20 +fmt.Println("-----2------",m) // 输出:`&[0 20 0 0 0 0 0 0 0 0]` +``` + +###### 多维数组 + +```golang +arr := [2][3]int{ + {1, 2, 3}, + {4, 5, 6}} //最外面的`}`不可以换行的,否则报错:`syntax error` +fmt.Println("-----",arr) +``` + +#### 冒泡排序 + +###### 第一种写法 +```golang +func main(){ + a :=[...]int64{12,23,293,34,128,132} + fmt.Println(a) + num := len(a) + for i := 0; i 从大到小排序 + +###### 第二种写法 + +```golang +func main(){ + a :=[...]int64{12,23,293,34,128,132} + fmt.Println(a) + num := len(a) + for i := 0; i