2022-08-13:以下go语言代码输出什么?A:[5 6 7 1 2 3 4] B:[1 2 3 4 5 6 7] C:[4 5 6 7 1 2 3]。

package main

import (
    "fmt"
)

func main() {
    nums := []int{1, 2, 3, 4, 5, 6, 7}
    k := 3
    rotate(nums, k)
    fmt.Println(nums)
}

func rotate(nums []int, k int) {
    k = k % len(nums)
    nums = append(nums[len(nums)-k:], nums[0:len(nums)-k]...)
}

答案选B。主要原因是 append 后的 nums 是新数组,它并不会影响 main 函数中的 nums。如果最后不是赋值给 nums,而是使用 copy,结果就是 A 了。如果是nums = append(nums[:1], nums[0:len(nums)-k]...),结果就是[1 1 2 3 4 6 7],会影响原数组,因为底层数组是同一个。

在这里插入图片描述