douganmo1121 2014-09-12 14:38
浏览 5
已采纳

用新值覆盖现有值

Look at the following code snippet.

package main

import (
    "fmt"
)

type class struct {
    prop1 string
    prop2 string
}

func main() {

    va1 := &class{"Hello", "Foo"}
    fmt.Println(&va1)
    va1 = &class{"TOO", "Boo"}
    fmt.Println(&va1)

}

As a result I've got the same pointed address.

0x1215a0c0
0x1215a0c0

With &T{} it will allocate new zeroed value address. But why here I've got the same address? Do I just override on second assignment the value?

  • 写回答

1条回答 默认 最新

  • douzhuo1853 2014-09-12 14:46
    关注

    The statement

    fmt.Println(&va1)
    

    prints the address of the variable va1, not what va1 is pointing to. The address of the variable does not change.

    Try this program:

    va1 := &class{"Hello", "Foo"}
    fmt.Printf("&va1: %v, pointer: %p, value: %v
    ", &va1, va1, va1)
    
    va2 := va1
    va1 = &class{"TOO", "Boo"}
    
    fmt.Printf("&va1: %v, pointer: %p, value: %v
    ", &va1, va1, va1)
    fmt.Printf("&va2: %v, pointer: %p, value: %v
    ", &va2, va2, va2)
    

    This program prints:

    &va1: 0x1030e0c0, pointer: 0x10328000, value: &{Hello Foo}
    &va1: 0x1030e0c0, pointer: 0x10328050, value: &{TOO Boo}
    &va2: 0x1030e0d0, pointer: 0x10328000, value: &{Hello Foo}
    

    Note that the address of the variable va1 does not change, but what va1 points to does change. Also, the assignment of a pointer to va1 does not modify the value va1 pointed to.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么