面试题答案
一键面试- 内存布局分析
- 切片
a
:- 切片
a
指向一个包含5个int
类型元素的底层数组[1, 2, 3, 4, 5]
。它的长度(len
)为5,容量(cap
)也为5。
- 切片
- 切片
b
:- 切片
b
是通过对切片a
进行切割a[1:3]
得到的。它指向切片a
底层数组的第二个元素(值为2),其长度(len
)为2(从索引1到索引2,不包括索引3),容量(cap
)为4(从索引1开始到数组末尾的元素个数)。
- 切片
- 切片
c
:- 切片
c
是通过make
函数创建的,长度(len
)和容量(cap
)都为2。它通过copy
函数将切片b
的内容复制进来,但是它有自己独立的底层数组。
- 切片
- 切片
- 修改影响分析
- 修改
a
:- 因为
b
与a
共享底层数组,所以如果修改a
中索引1及之后的元素,会影响到b
。例如,a[1] = 10
,那么b[0]
也会变为10。而c
由于有自己独立的底层数组,不受影响。
- 因为
- 修改
b
:- 由于
b
与a
共享底层数组,修改b
会影响a
。比如b[0] = 20
,那么a[1]
也会变为20。而c
不受影响,因为它和b
没有共享底层数组。
- 由于
- 修改
c
:- 因为
c
有自己独立的底层数组,修改c
不会影响a
和b
。例如c[0] = 30
,a
和b
的内容保持不变。
- 因为
- 修改