logo

函数传数组(array)
函数传入数组类型的值与引用的对比
package main
import "fmt"
func main() {
   a := [4]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)//可以获取到地址?  ❌
   //传值
   changeArrayVal(a)
   fmt.Printf("2、changeArrayVal函数调用后:变量a的内存地址是:%p ,值为:%v \n\n", &a, a)//[99,2,3,4]  ❌
   //传引用
   changeArrayPtr(&a)
   fmt.Printf("3、changeArrayPtr函数调用后:变量a的内存地址是:%p ,值为:%v \n\n", &a, a)//[99,250,3,4]  ❌
}
func changeArrayVal(a [4]int) {
   fmt.Printf("----------changeArrayVal函数内:值参数a的内存地址是:%p ,值为:%v \n", &a, a) //[1,2,3,4]
   fmt.Printf("----------changeArrayPtr函数内:值参数a的内存地址是:%p \n", a) //获取不到地址
   a[0] = 99
}
func changeArrayPtr(a *[4]int) {
   fmt.Printf("----------changeArrayPtr函数内:指针参数a的内存地址是:%p ,值为:%v \n", &a, a) //&[1,2,3,4]
   (*a)[1] = 250
}