5week-3可变形参

一.可变参数基本使用

  • 可变参数用途:收集实参放到1个切片里,len=cap;切片不是要让你修改的,而是让你遍历的
  • 可变参数必须在参数列表最后一个,只能出现一次
package main

import "fmt"

//1.只有可变参数   ...int可以接受0到多个参数
func fn1(nums ...int) {
	fmt.Printf("%T %v %v %v\n", nums, nums, len(nums), cap(nums)) //int类型的切片
}


//2.混合参数
func fn2(x, y int, nums ...int) {
	fmt.Printf("%d,%d,%T %v %v %v\n", x, y, nums, nums, len(nums), cap(nums))
}
func main() {
	// fn1(1, 3, 5, 6)
	// fn2() //不行
	// fn2(1)//不行
	fn2(1, 2) //可以
	fn2(3, 4, 5, 6, 7)
}
  • 结果

二.切片传递

package main

import "fmt"

func fn4(x, y int) {
	fmt.Println(x, y)

}
func fn6(nums ...int) {
	fmt.Printf("%p %p %v\n", &nums, &nums[0], nums)
	fmt.Printf("%T %v %v %v\n", nums, nums, len(nums), cap(nums))
}
func main() {
	var p = []int{1, 3}
	fmt.Printf("%p %p %v\n", &p, &p[0], p)
	// fn4(p...) //不行分解,因为fn4中没有可变函数
	fn6(p...) //把p{1,3}切片分解到fn6函数中fn6生成了新header底层,数组用的是p数组,这个在go中叫切片传递,只能在可变参数中时使用
}
  • 结果

三.

posted @ 2023-01-16 00:50  john5的博客  阅读(12)  评论(0编辑  收藏  举报
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css