Go语言中有关数组传递参数问题

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实际上是同一块内存地址空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值