go 参数传递

 直接看例子:

package main

import "fmt"

func main() {
   b := false 
   fmt.Println("b's address is:", &b) 
   bo(b) 
   fmt.Println(b) 
} 

func bo(b bool) {
   fmt.Println("b's address is:", &b) 
   b = true 
}

输出:

b's address is: 0xc420014088
b's address is: 0xc420014089
false

->> bool 值传递

package main
import "fmt"

var i int = 5 

func main() {
    modify(&i)
    fmt.Println(i)
}

func modify(i *int) {
    *i = 6 
}

输出:

6

->> 指针修改值,c语言类似

package main
import "fmt"

func modifyElem(s int) {
    s += 100 
}

func modifyArray1(s [5]int) {
    s[1] = 200 
}
func modifyArray2(s [5]int) {
    s = [5]int{5,5,5,5,5}
}

func main() {
    var s = [5]int{1, 2, 3, 4, 5}
    modifyElem(s[0])
    fmt.Println(s[0])

    modifyArray1(s)
    fmt.Println(s)

    modifyArray2(s)
    fmt.Println(s)
}

输出:

1
[1 2 3 4 5]

[1 2 3 4 5]

->>数组无法修改实参

package main
import "fmt"

func modify1(s []int) {
    fmt.Printf("modify1:%p \n", &s) 
    s = []int{500,500,500,500,500}
}

func modify2(s []int) {
    fmt.Printf("modify2:%p \n", &s) 
    s[4] += 500 
}

func main() {
    a := [5]int{1, 2, 3, 4, 5}
    s := a[:]
    fmt.Printf("main   :%p \n", &s) 
    modify1(s)
    fmt.Println(s[4])

    modify2(s)
    fmt.Println(s[4])
}

输出:

main   :0xc42000a060
modify1:0xc42000a080
5
modify2:0xc42000a0a0
505

->>slice类型可以修改实参,modify1中将s指向了另外的slice,无法修改实参

package main
import "fmt"

func modify1(s []int) {
    s = []int{9,9,9}
    s[0] = 100 
}

func modify2(s []int) {
    s[0] = 100 
    s = []int{9,9,9}
}

func main() {
    a := [5]int{1, 2, 3, 4, 5}
    s := a[:]

    modify1(s)
    fmt.Println(s[0])

    modify2(s)
    fmt.Println(s[0])
}

输出:

1
100

->>modify1中先将s指向了别处,所以无法修改实参,modify2修改值后再指向别处,所以修改了实参

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值