golang中的数组怎么怎么表示呢?我们来看一下下面的这段代码,然后运行会发现,他只是一个值传递。也就是说 myArray3 的第一个数值并不会改变
package main
import "fmt"
func printArray(myArray [4]int) {
for index, value := range myArray {
fmt.Println("index = ", index, ", value = ", value)
}
myArray[0] = 111
}
func main() {
//固定长度的数组
var myArray1 [10]int
myArray2 := [10]int{1, 2, 3, 4}
myArray3 := [4]int{11, 22, 33, 44}
for i := 0; i < 10; i++ {
//for i := ; i < len( myArray1) ; i++ {fmt.Println(myArray1[i])
fmt.Println(myArray1[i])
}
for index, value := range myArray2 {
fmt.Println("index = ", index, ", value = ", value)
}
fmt.Printf("myArray1 types = %T\n", myArray1)
fmt.Printf("myArray2 types = %T\n", myArray2)
fmt.Printf("myArray3 types = %T\n", myArray3)
fmt.Println("7777777777777")
printArray(myArray3)//值传递只拷贝
for index, value := range myArray3 {
fmt.Println("index = ", index, ", value = ", value)
}
}
那么怎么才能让它改变?下面我们将引入切片 slice
package main
import "fmt"
func printArray(myArray []int) { //引用传递
//"_"表示匿名的变量
for _, value := range myArray {
fmt.Println(" value = ", value)
}
myArray[0] = 111
}
func main() {
myArray2 := []int{1, 2, 3, 4}
fmt.Println("-------------")
printArray(myArray2) //值传递只拷贝
for index, value := range myArray2 {
fmt.Println("index = ", index, ", value = ", value)
}
}
所以区别就在一个是空的 [ ] 而另一个是带值的
动态数组在传参上是引用传递,而且不同元素长度的动态数组他们的形参是一致的。