Golang Go语言中萌新求教一个语法问题(关于 slice)

Golang Go语言中萌新求教一个语法问题(关于 slice)
package main

import "fmt"

func main(){
var a = []int{1,2,3}

arr(a)

fmt.Println(a)
}

func arr (a []int) {
a[0] = 888
fmt.Println(“a=”,a)

}
这里 mian 函数和 arr 函数 a 都是{888,2,3}
说明 slice 是引用类型
但是把 arr 函数语句换成 a = append ( a, 3 )
这样只是在 arr 函数里追加了 3,但是 mian 中没有改变,这是为什么呢?


更多关于Golang Go语言中萌新求教一个语法问题(关于 slice)的实战教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

append 会扩容 slice,导致指针变了

更多关于Golang Go语言中萌新求教一个语法问题(关于 slice)的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


明白了,蟹蟹

你好,很高兴看到你对Go语言中的slice语法有疑问。在Go语言中,slice是一个非常强大且灵活的数据结构,常用于处理动态数组。以下是一些关于slice的基本语法和常见操作的简要说明,希望能帮助你解决疑惑:

  1. 声明和初始化

    var s []int     // 声明一个空的int slice
    s = []int{1, 2, 3} // 初始化slice
    
  2. slice的底层结构: slice实际上是一个包含三个字段的结构体:指向数组的指针(Pointer)、slice的长度(Length)和slice的容量(Capacity)。

  3. 切片操作

    s2 := s[1:3] // 从s中切片,得到包含s[1]和s[2]的新slice
    
  4. 追加元素

    s = append(s, 4) // 将4追加到slice末尾
    
  5. 注意事项

    • 当slice的容量不足以容纳新元素时,append操作会分配一个新的底层数组,并复制现有元素到新数组中。
    • slice是引用类型,因此传递slice到函数时,函数内对slice的修改会影响原slice。

如果你是遇到了具体的slice语法错误或者问题,欢迎提供更详细的代码或错误信息,以便更准确地帮助你解决问题。希望这些信息对你有所帮助!

回到顶部