0
点赞
收藏
分享

微信扫一扫

12golang基础-(切片slice)Golang中的数组与动态数组的区别

青青子衿谈育儿 2022-03-12 阅读 82

1. 数组

1.1 声明数组的方式
var myArray1 [10]int
myArray2 := [10]int{1,2,3,4}//前几位为1234,后几位为0
myArray3 := [4]int
1.2 数组的长度是固定的
1.3 固定长度的数组在传参的时候是严格匹配数组类型的
1.4 数组是值传递

可以查看下面array.go的代码

2. 动态数组slice
2.1 声明slice的方式
myArray := []int{1,2,3,4}//此时的数组为[4]int
2.2 动态数组(slice)是引用传递
2.3 动态数组在传参上是引用传递,而且不同元素长度的动态数组他们的形参是一致的。

array.go

package main

//不同长度的数组传参的问题比如[4]int 和 [10]int
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}//前几位为1234,后几位为0
    myArray3 := [4]int
    
    //for i :=0;i < 10; i++{
    for i := 0; i < len(myArray1);i++{
        fmt.Println(myArray1[i])
    }
    for index,value ;= range myArray2{
        fmt.Println("index = ",index,"value = ",value)
    }//range会根据不同的集合返回不同的值
    
    //查看数组的数据类型
    fmt.printf("myArray1 types = %T\n",myArray1)
    fmt.printf("myArray2 types = %T\n",myArray2)
    fmt.printf("myArray3 types = %T\n",myArray3)
    
    printArray(myArray3)
}
slice.go
package main

import "fmt"

func printArray(myArray []int){
    //引用传递
    //_表示匿名的变量
    for _ ,value := range myArray {
        fmt.Println("value = ",value)
    }
    
    myArray[0]=100
}

func main(){
    //动态数组,切片slice:指向内存的指针
    myArray := []int{1,2,3,4}//此时的数组为[4]int
    
    fmt.Printf("myArray type is %T\n",myArray)
    
    printArray(myArray)
    
    fmt.Println(" ===== ")
    
    for _,value := range myArray {
        fmt.Println("value = ",value)
    }
}
举报

相关推荐

0 条评论