数组 Array
- 定义数组的格式:
var <varName> [n]<type,n> = 0
- 数组长度也是类型的一部分,因此具有不同长度的数组为不同类型
- 注意区分指向数组的指针和指针数组
- 数组在Go中为值类型
- 数组之间可以使用
==
或者!=
进行比较,但是不可以使用>
或者<
- 可以使用
new
来创建数组,此方法返回一个指向数组的指针 - Go支持多维数组
例子
1 | func arrF1() { |
输出
1 | [0 0] |
如果字面值不够,会用0值来补充剩余的元素
索引赋值
前4个数字为0,最后一个数字为1
1 | a4 := [5]int{4: 1} |
输出
1 | [0 0 0 0 1] |
在知道具体元素的情况下,也可以不声明数组长度
1 | a5 := [...]int{1, 2, 3, 4, 5} |
输出
1 | [1 2 3 4 5] |
或者根据索引进行赋值,输出同上
1 | a6 := [...]int{0: 1, 1: 2, 2: 3, 3: 4, 4: 5} |
前一位为索引,后一位为值
对于a4 := [5]int{4: 1}
也可以使用另外一种写法,不指定数组长度
1 | a7 := [...]int{4: 1} |
输出
1 | [0 0 0 0 1] |
指向数组的指针和指针数组
指向数组的指针
1 | a7 := [...]int{4: 1} |
输出
1 | &[0 0 0 0 1] |
即 p 指针是数组[0 0 0 0 1]的地址
指针数组
1 | x, y := 1, 2 |
输出:
1 | [0xc00001a178 0xc00001a180] |
数组在Go中为值类型
在其他语言中,数组为引用类型,在Go中为值类型,当函数中数组参数时
1 | func test(arr1){ |
数组比较
数组类型要相同,长度一样
1 | a9 := [...]int{1, 2} |
输出
1 | false |
new 关键字
1 | p2 := new([10]int) |
输出
1 | &[0 0 0 0 0 0 0 0 0 0] |
指向数组的指针。
都可以使用下标的方式去修改数组
1 | a := [10]int{} |
输出
1 | [0 2 0 0 0 0 0 0 0 0] |
多维数组
1 | func arrF2() { |
输出
1 | [[1 1 1] [2 2 2]] |
索引赋值
1 | func arrF2() { |
输出
1 | [[0 3 0] [4 0 0]] |
但是与一维不同的是,不能用[...]
冒泡排序
1 | func popF(){ |