Go的数组和指针

2019-05-16  本文已影响0人  MaxZing

一、 定义数组

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. 下标遍历
// 下标遍历
func main() {

    //:=定义Array,必须初始化
    arr2 := [5]int{1, 2, 3, 4, 5}
    for i := 0; i < len(arr2); i++ {
        fmt.Println(arr2[i])
    }
}
  1. range遍历(index)
func main() {
    // range遍历(index)
    arr2 := [5]int{1, 2, 3, 4, 5}
    for index:= range arr2{
        fmt.Println(index)
    }
}
  1. range遍历(index,value)
func main() {
    // range遍历(index,value)
    arr2 := [5]int{1, 2, 3, 4, 5}
    for index, value := range arr2 {
        fmt.Println(index, value)
    }
}
  1. range遍历(value)
func main() {
    // range遍历(value), Go不允许定义不使用的变量,所以用下划线代替
    arr2 := [5]int{1, 2, 3, 4, 5}
    for _, value := range arr2 {
        fmt.Println( value)
    }
}

三、Go语言中Array是值类型

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

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. 指针用于引用传递
    首先,上面的代码做一个变化:
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. 指针的定义方式
    由上面代码可以看出指针的定义方式就是在普通类型前面加一个*

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

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

喜欢请点个赞,

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

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

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

上一篇下一篇

猜你喜欢

热点阅读