Go数组向函数传递参数
在学习C语言 C++的时候我们一定会学习指针,在数组向函数传参时候我们会有值传递和地址传递问题。同样在go语言中也不可避免这个问题。分为静态数组的传递和动态数组的传递
什么是静态数组?
静态数组就是数组长度固定不变的数组。
eg:
var Array[5] int = [5]int {1,2,3,4}
静态数组像函数传递参数是一个值传递
package main
import "fmt"
func printArr(arr1 [4]int){
arr1[0] = 123
for index,value := range(arr1){
fmt.Println("index = ", index,"value = ",value)
}
}
func main(){
array := [4]int{1,2,3}
printArr(&array)
fmt.Println(array[0])
}
运行结果发现我们在函数内对于参数的更改并不影响数组本身,因为它是个值传递。
什么是动态数组?
动态数组就是数组长度可变的数组。
eg:
Array := []int{1,2,3,4}
动态数组是地址的传递
package main
import "fmt"
func printArray(Array []int){
for _,value := range(Array){
fmt.Println("value = ",value)
Array[0] = 222
}
}
func main(){
myArray := []int{1,2,34,4}
printArray(myArray)
fmt.Println("After")
fmt.Println("myArray[0] = " , myArray[0])
}
我们可以看到实际参数myArray和形式参数Array实际上是同一块内存地址空间