go 语言 – 切片函数参数

Go语言内部,切片的结构类型表示为:

type slice struct {  
    Length        int
    Capacity      int
    ZerothElement *byte
}

切片包含长度、容量和指向数组第0个元素的指针。当一个切片被传递给函数时,即使它是通过值传递的,指针变量也会指向相同的底层数组。

因此,当切片作为参数传递给函数时,在函数内部所做的更改,在函数外部也是可见的。让我们写一个程序来验证一下。

package main

import (  
    "fmt"
)

func subtactOne(numbers []int) {  
    for i := range numbers {
        numbers[i] -= 2
    }

}
func main() {  
    nos := []int{8, 7, 6}
    fmt.Println("slice before function call", nos)
    subtactOne(nos)                               //function modifies the slice
    fmt.Println("slice after function call", nos) //modifications are visible outside
}

函数内部和外部操作的是同一个切片,这与数组是不同的。

上述程序的输出为:

slice before function call [8 7 6]  
slice after function call [6 5 4]  



浙ICP备17015664号 浙公网安备 33011002012336号 联系我们 网站地图  
@2019 qikegu.com 版权所有,禁止转载