我有一个简单的例子,虽然它可能看起来毫无意义,但这些例子已经与我的认知大相径庭。
有人能告诉我发生了什么吗?
我使用...语法将[]int中的元素传递给参数args,但是当我更改形式参数args时,[]int实际参数也会被更改。
我修改了args的顺序,但[]int的顺序也受到影响:
package main
import (
"fmt"
)
func bubbleSort(args ...int) {
for i := 0; i < len(args); i++ {
for j := 0; j < len(args)-1; j++ {
if args[j] > args[j+1] {
args[j], args[j+1] = args[j+1], args[j]
}
}
}
}
func main() {
isle := []int{3, 6, 1, 2, 5}
bubbleSort(isle...)
fmt.Printf("%v\n", isle)
}
// [1 2 3 5 6]
如果我传入一个参数会怎样?显然,[]int 不受 args 影响:
package main
import (
"fmt"
)
func bubbleSort(args ...int) {
for i := 0; i < len(args); i++ {
for j := 0; j < len(args)-1; j++ {
if args[j] > args[j+1] {
args[j], args[j+1] = args[j+1], args[j]
}
}
}
}
func main() {
isle := []int{3, 6, 1, 2, 5}
bubbleSort(isle[0], isle[1], isle[2], isle[3], isle[4])
fmt.Printf("%v\n", isle)
}
// [3 6 1 2 5]
isle
传递给函数。函数修改了isle
的后备数组。在第二个示例中,传递了一个带有后备数组的新切片到函数中。 - Charlie Tumahai