2022-07-16:以下go语言代码输出什么?A:[];B:[5];C:[5 0 0 0 0];D:[0 0 0
2022-07-16:以下go语言代码输出什么?A:[];B:[5];C:[5 0 0 0 0];D:[0 0 0 0 0]。
package main
import (
"fmt"
)
func main() {
a := make([]int, 0, 5)
addElem(a, 5)
fmt.Println(a)
}
func addElem(a []int, i int) {
a = append(a, 5)
}
答案选A。可以简单的理解切片本身是结构体,参数传递只是结构体复制传递。切片在大多数情况下,只能修改元素,不能删除或者新增元素。

本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu
对slice的修改只会改底层的数据,不会修改长度和容量,append后a底层的数据已经添加了5这个元素,只是因为a的长度是0没有显示出来,所以输出[]。
Go的slice底层其实是结构体:
该
addElem()中将 slice 作为参数传递时依然是值传递,因此传入的是该 slice 的拷贝,故addElem中是一个新的slice;所以原来的
a实际是没执行任何操作,因此打印a的结果为[],而addElem()中 因为是值拷贝,所以在append()后打印结果为[5]