Go 数组array 控制语句 06

数组Array

其他语言中数组作为一个节省内存的手段,数组都是引用类型,但是go中是值拷贝,想要使用引用类型的数组,可以用切片实现

  • 定义数组的格式: var <varName> [n] <type> , n> = 0;
  • 数组长度也是类型的一部分,因此具有不同长度的数组为不同类型
  • 注意区分指向数组的指针和指针数组
  • 数组在Go中为值类型
  • 数组直接可以使用 == 或 != 进行比较,但不可以使用< 或 >
  • 可以使用new 来创建数组, 此方法返回一个指向数组的指针
  • Go支持多维数组

数组基本格式

// 长度为2的int型数组,因为go语言中数组并不是一个统一的类型,数组的长度也是整个类型的一部分
var a [2]int
// 长度为1的数组和长度为2的数组,是两种不同的类型,是不能直接的赋值
var b [1]int
b = a
fmt.Println(b)

数组赋值

// 给第一个元素赋值1
a := [2]int{1}
fmt.Println(a)

// 使用索引赋值,有20个元素,数组下标从0开始,下标为19的元素值为1
b := [20]int{19: 1}
fmt.Println(b)

// 数组长度可以用 ... 来表示不知道又多少个元素,那么go会自动根据你后面的元素个数,计算长度
c := [...]int{1, 2, 3, 4, 5}
fmt.Println(c)

//同样也可以使用索引赋值
d := [...]int{0: 1, 1: 2, 2: 3, 10: 1}
fmt.Println(d)
[1 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1]
[1 2 3 4 5]
[1 2 3 0 0 0 0 0 0 0 1]

数组的指针和指针数组

数组的指针

a := [...]int{9: 1}
var b *[10]int = &a
fmt.Println(b)
&[0 0 0 0 0 0 0 0 0 1]

指针数组

x, y := 1, 2
a := [...]*int{&x, &y}
fmt.Println(a)
[0xc420016080 0xc420016088]

这里就保存了x,y的地址,而并不是数组的值

数组的比较

同类型数组的比较

a := [2]int{1, 2}
b := [2]int{1, 2}
fmt.Println(a == b)
true

如果是不同类型的就无法比较了

a := [2]int{1, 2}
b := [1]int{1}
fmt.Println(a == b)
invalid operation: a == b (mismatched types [2]int and [1]int)

使用new关键字创建数组,返回的就是指向数组的指针

a := new([10]int)
fmt.Println(a)
&[0 0 0 0 0 0 0 0 0 0]

使用索引对数组赋值

a := new([10]int)
a[1] = 1
fmt.Println(a)

b := [10]int{}
b[1] = 1
fmt.Println(b)
&[0 1 0 0 0 0 0 0 0 0] 
[0 1 0 0 0 0 0 0 0 0]

都可以使用索引的方式赋值

多维数组

注意最后一个括号,一定不能换行,一定要跟在最后一个元素后面

a := [2][3]int{
        {1, 1, 1},
        {2, 2, 2}}
    fmt.Println(a)

    //同时如果不清楚数组个数,也可以用 ... 但是只能是顶级数组才可以
    b := [...][3]int{
        {1, 1, 1},
        {2: 5}}
    fmt.Println(b)
[[1 1 1] [2 2 2]]
[[1 1 1] [0 0 5]]

go语言版本的冒泡排序

func main() {
    a := [...]int{7, 3, 1, 2, 4, 5, 6}
    l := len(a)
    for i := 0; i < l; i++ {
        for j := i + 1; j < l; j++ {
            if a[i] > a[j] {
                temp := a[i]
                a[i] = a[j]
                a[j] = temp
            }
        }
    }

    fmt.Println(a)
}
[1 2 3 4 5 6 7]