logo

函数传slice型参数
函数传slice类型的值与引用的对比
package main
import "fmt"
func main() {
   a := []int{1, 2, 3, 4}
   fmt.Printf("1、变量a的内存地址是:%p ,值为:%v \n\n", &a, a)//[1,2,3,4]
   fmt.Printf("切片型变量a内存地址是:%p \n\n", a)//可以获取到地址,类似:0xc420018080
   //传值
   changeSliceVal(a)
   fmt.Printf("2、changeSliceVal函数调用后:变量a的内存地址是:%p ,值为:%v \n\n", &a, a)//[1,2,3,4]
   //传引用
   changeSlicePtr(&a)
   fmt.Printf("3、changeSlicePtr函数调用后:变量a的内存地址是:%p ,值为:%v \n\n", &a, a)//[250,2,3,4]
}
func changeSliceVal(a []int) {
   fmt.Printf("----------changeSliceVal函数内:值参数a的内存地址是:%p ,值为:%v \n", &a, a) //[1,2,3,4]
   fmt.Printf("----------changeSlicePtr函数内:值参数a的内存地址是:%p \n", a)
   a[0] = 99
}
func changeSlicePtr(a *[]int) {
   fmt.Printf("----------changeSlicePtr函数内:指针参数a的内存地址是:%p ,值为:%v \n", &a, a) //&[1,2,3,4]
   (*a)[1] = 250
}