02-Go的数组和指针

一、 定义数组

下面介绍3种定义数组的方式:空数组,:=定义Array、定义自由长度的数组。
还有二维数组的定义

  1. 如下
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    package main

    import (
    "fmt"
    )

    func main() {
    //空数组
    var arr1 [10]int
    //:=定义Array,必须初始化
    arr2 := [5]int{1, 2, 3, 4, 5}
    //自由长度
    arr3 := [...]int{1, 2, 3}
    //二维数组
    var arrInArr [3][4]int
    fmt.Println(arr1, arr2, arr3, arrInArr)
    }

二、 遍历数组

  1. 下标遍历

    1
    2
    3
    4
    5
    6
    7
    8
    9
    // 下标遍历
    func main() {

    //:=定义Array,必须初始化
    arr2 := [5]int{1, 2, 3, 4, 5}
    for i := 0; i < len(arr2); i++ {
    fmt.Println(arr2[i])
    }
    }
  2. range遍历(index)

    1
    2
    3
    4
    5
    6
    7
    func main() {
    // range遍历(index)
    arr2 := [5]int{1, 2, 3, 4, 5}
    for index:= range arr2{
    fmt.Println(index)
    }
    }
  3. range遍历(index,value)

    1
    2
    3
    4
    5
    6
    7
    func main() {
    // range遍历(index,value)
    arr2 := [5]int{1, 2, 3, 4, 5}
    for index, value := range arr2 {
    fmt.Println(index, value)
    }
    }
  4. range遍历(value)

    1
    2
    3
    4
    5
    6
    7
    func main() {
    // range遍历(value), Go不允许定义不使用的变量,所以用下划线代替
    arr2 := [5]int{1, 2, 3, 4, 5}
    for _, value := range arr2 {
    fmt.Println( value)
    }
    }

三、Go语言中Array是值类型

这意味着,Array传递到其他函数时,在其他函数的操作不会影响传递前的值
举个例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
func main() {
arr3 := [3]int{1, 2, 3}

fmt.Println("测试前", arr3)
testValue(arr3)
fmt.Println("测试后", arr3)

}

func testValue(araya [3]int) {
//函数内部,修改第一个元素值
araya[0] = 100
fmt.Println("测试中", araya)
}

测试结果:

所以数据是copy到下一个函数的,想要引用传递,则需要指针

四、指针

Go 中的指针是不参与计算的,单纯的表示变量的位置

  1. 指针用于引用传递
    首先,上面的代码做一个变化:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    func main() {
    arr3 := [3]int{1, 2, 3}
    fmt.Println("测试前", arr3)
    testValue(&arr3)
    fmt.Println("测试后", arr3)

    }

    func testValue(araya *[3]int) {
    //函数内部,修改第一个元素值
    araya[0] = 100
    fmt.Println("测试中", araya)
    }

新结果:

  1. 指针的定义方式
    由上面代码可以看出指针的定义方式就是在普通类型前面加一个*

赋值就是在对应类型的值前面加&,取出地址。

1
2
arr3 := [3]int{1, 2, 3}
var araya *[3]in = &arr3

喜欢请点个赞,

转载请注明出处:https://www.jianshu.com/u/4915ed24d1e3

如有错误,请务必指正!谢谢!

我的博客:https://xzing.github.io/