请问 for range 出来的切片取地址(全部相同) 和 for 取出来的地址是不一样的,

请问 for range 出来的切片取地址(全部相同) 和 for 取出来的地址是不一样的,

# 具体遇到的问题

# 报错信息的截图

# 相关课程内容截图


# 尝试过的解决思路和结果

# 粘贴全部相关代码,切记添加代码注释(请勿截图)

var sliceVariables1 []int
arrayVariables1 := [...]int{1, 2, 3, 99, 5}
sliceVariables1 = arrayVariables1[:]
for
i := 0; i < len(sliceVariables1); i++ {
fmt.Printf("sliceVariables1[%d]=[%d],地址=%p\n", i, sliceVariables1[i], &sliceVariables1[i])

}
/*sliceVariables1[0]=[1],地址=0xc00000a360
sliceVariables1[1]=[2],地址=0xc00000a368
sliceVariables1[2]=[3],地址=0xc00000a370
sliceVariables1[3]=[99],地址=0xc00000a378
sliceVariables1[4]=[5],地址=0xc00000a380
*/
for index, value := range sliceVariables1 {

fmt.Printf("range--sliceVariables1[%d]=[%d],地址=%p\n", index, value, &value)

}
/*range--sliceVariables1[0]=[1],地址=0xc000016178
range--sliceVariables1[1]=[2],地址=0xc000016178
range--sliceVariables1[2]=[3],地址=0xc000016178
range--sliceVariables1[3]=[99],地址=0xc000016178
range--sliceVariables1[4]=[5],地址=0xc000016178
*/


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
我是波哥 2020-11-07 15:36:21

同学你好,你提的这个问题是一个特别棒的问题,咱们一起来学习下。


http://img1.sycdn.imooc.com//climg/5fa64e3509e5ee3609300079.jpg


​for range在遍历值类型时,其中的value变量是一个值的拷贝,当使用&获取指针时,实际上是获取到value这个临时变量的指针,而value变量在for range中只会创建一次,之后循环中会被一直重复使用。


同学,你这个问题问的特别好,可以做为一个典型问题和其它同学一起分析。


加油~

  • 提问者 慕仰4468487 #1
    我知道了,这个 index,value:= 是相当于申请了一个变量,把每次遍历的的值赋给这个变量,所以这样输出的地址都是一样的,sliceVariables1[index], &sliceVariables1[index]这样取的话就对上了
    2020-11-07 16:41:57
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师