Go每日一题(103) 的题目如下

4296 次点击 · 3 赞 ·大约8小时之前 开始浏览   · 来源「Golang来啦」

下面这段代码输出什么?

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

	for i, v := range a {
		if i == 0 {
			a[1] = 12
			a[2] = 13
		}
		r[i] = v
	}
	fmt.Println("r = ", r)
	fmt.Println("a = ", a)
}
4296 阅读
45 回复
sheep
sheep · #1 · 3年之前

mark

henry1
henry1 · #2 · 3年之前

ok

mingliangge
mingliangge · #3 · 3年之前

学到了

jan-bar
jan-bar · #4 · 3年之前

数组和切片用range的遍历赋值不同,看来range要好好研究了。

felixzxk
felixzxk · #5 · 3年之前

m

gokx
gokx · #6 · 3年之前

mark

gonglf
gonglf · #7 · 3年之前

虽然 range 表达式发生复制时,但是副本的指针依旧指向原底层数组

neil_liu
neil_liu · #8 · 3年之前

mark

euibieur894
euibieur894 · #9 · 3年之前

这是26号的题呀

gobanger
gobanger · #10 · 3年之前

学习了,被教育了

Natsuwau
Natsuwau · #11 · 3年之前

mark

minQie
minQie · #12 · 3年之前

di

feiyang
feiyang · #13 · 3年之前

当 range 表达式发生复制时,副本的指针依旧指向原底层数组

Zuos
Zuos · #14 · 3年之前

mark

toywish
toywish · #15 · 3年之前

mark

mingtop
mingtop · #16 · 3年之前

切片在 go 的内部结构有一个指向底层数组的指针,当 range 表达式发生复制时,副本的指针依旧指向原底层数组,所以对切片的修改都会反应到底层数组上,所以通过 v 可以获得修改后的数组元素。

abcdhope
abcdhope · #17 · 3年之前

当 range 表达式发生复制时,切片副本的指针依旧指向原底层数组,而数组副本指向新的数组。

hypersus
hypersus · #18 · 3年之前

踩坑了,打卡

brothersam
brothersam · #19 · 2年之前

kao

wzbwzt
wzbwzt · #20 · 2年之前

1

hasbug
hasbug · #21 · 2年之前

mark

haha_cat
haha_cat · #22 · 2年之前

切片循环修改底层数组 立马见效的

mingtop
mingtop · #23 · 2年之前

这道题是昨天第二题的一个解决办法,这的 a 是一个切片,那切片是怎么实现的呢?切片在 go 的内部结构有一个指向底层数组的指针,当 range 表达式发生复制时,副本的指针依旧指向原底层数组,所以对切片的修改都会反应到底层数组上,所以通过 v 可以获得修改后的数组元素。

huanfengnt
huanfengnt · #24 · 2年之前

切片和数组还是有很大的不同的

_Aiden_
_Aiden_ · #25 · 2年之前

mark

YuPeng
YuPeng · #26 · 2年之前

打卡

flyZ
flyZ · #27 · 2年之前

mark

hasbug
hasbug · #28 · 2年之前

mark

huangyf168
huangyf168 · #29 · 2年之前

mark

feiyang
feiyang · #30 · 2年之前
HeartLeo
HeartLeo · #31 · 2年之前

mark

cainiaoyige01
cainiaoyige01 · #32 · 2年之前

切片内部是一个struct包含一个底层数组指针 只要不发生扩容 里面的元素修改都会发生变化

brothersam
brothersam · #33 · 2年之前

[0 12 13 4 5] [0 12 13 4 5] a是切片,快照模式是a的指针,所以底层的数组还是会改动。

Qmfuser
Qmfuser · #34 · 2年之前

mark

hasbug
hasbug · #35 · 2年之前

mark

huangyf168
huangyf168 · #36 · 2年之前

mark

528548004
528548004 · #37 · 大约1年之前

image.png

feiyang
feiyang · #38 · 大约1年之前

mark

zhangwei_go
zhangwei_go · #39 · 大约1年之前

r = [1 12 13 4 5] a = [1 12 13 4 5] 这道题是昨天第二题的一个解决办法,这的 a 是一个切片,那切片是怎么实现的呢?切片在 go 的内部结构有一个指向底层数组的指针,当 range 表达式发生复制时,副本的指针依旧指向原底层数组,所以对切片的修改都会反应到底层数组上,所以通过 v 可以获得修改后的数组元素。

BigBigGopher
BigBigGopher · #40 · 大约1年之前

mark

YuPeng
YuPeng · #41 · 大约1年之前

mark 学到了

YuPeng
YuPeng · #42 · 大约1年之前

细节啊 平时还是要多思考 应该想到的

Qmfuser
Qmfuser · #43 · 大约1年之前

mark

YuPeng
YuPeng · #44 · 5月之前

mark

zhangwei_go
zhangwei_go · #45 · 5月之前

当 range 表达式发生复制时,副本的指针依旧指向原底层数组

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传