golang 没有引用传值

1、普通变量

先看一段c语言

int main(int argc, char **argv) {
    int a = 3

    // b引用了a的地址,就是说他们都指向一块地址
    int &b = a
    printf("a=%p, b=%p\n", &a, &b)
}

再看看go语言

func main() {
    var a int

    // b,c仅仅在自己的内存地址处保存了a的地址
    var b, c = &a, &a
    fmt.Println(b, c)  
    fmt.Println(&b, &c)
}

---------------
0xc420012088 0xc420012088
0xc42000c028 0xc42000c030
2、map 是引用传值吗?
func fn(m map[int]int) {
    m = make(map[int]int)
    m[1] = 2
    fmt.Println("inner func, "
                " addr=", unsafe.Pointer(&m), 
                " m==nil ?", m == nil, 
                " m=", m)
}

func main() {
    var m map[int]int
    fn(m)
    fmt.Println("out func, map",
                "addr=", unsafe.Pointer(&m), 
                " m=", m)
}

输出

inner func, map addr= 0xc42000c048  m==nil ? false  m= map[1:2]

// 若是引用传值,外部的map也应该变化
out func, map addr= 0xc42000c040  m == nil ? true  m= map[]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值