Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

切片和指针关系描述错误,会导致对相关概念理解严重歧义。 #861

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion eBook/04.4.md
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,10 @@ func main() {

更复杂的数据通常会需要使用多个字,这些数据一般使用引用类型保存。

一个引用类型的变量 `r1` 存储的是 `r1` 的值所在的内存地址(数字),或内存地址中第一个字所在的位置。
**注意** 引用类型表示创建的变量包含一个指向底层数据结构的指针和一组管理底层数据结构的字段。
> 引用类型之所以可以引用,是因为我们创建引用类型的变量,其实是一个标头值,标头值里包含一个指针,指向底层的数据结构,当我们在函数中传递引用类型时,其实传递的是这个标头值的副本,它所指向的底层结构并没有被复制传递,这也是引用类型传递高效的原因。

一个引用类型的变量 `r1` 包含存储的是 `r1` 的值所在的内存地址(数字),或内存地址中第一个字所在的位置。

<img src="images/4.4.2_fig4.3.jpg?raw=true" style="zoom:67%;" />

Expand Down
5 changes: 4 additions & 1 deletion eBook/07.2.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,10 @@ func main() {

如果 `s2` 是一个切片,你可以将 `s2` 向后移动一位 `s2 = s2[1:]`,但是末尾没有移动。切片只能向后移动,`s2 = s2[-1:]` 会导致编译错误。切片不能被重新分片以获取数组的前一个元素。

**注意** 绝对不要用指针指向切片。切片本身已经是一个引用类型,所以它本身就是一个指针!!
<s>**注意** 绝对不要用指针指向切片。切片本身已经是一个引用类型,所以它本身就是一个指针!!</s>
**注意** Go slice 不是指针,而是包含指针的结构体 (slice 是结构体变量,但slice[0]直接指向了底层数组的第一个元素)
源码地址:https://github.com/golang/go/blob/master/src/runtime/slice.go#L13


问题 7.2: 给定切片 `b:= []byte{'g', 'o', 'l', 'a', 'n', 'g'}`,那么 `b[1:4]`、`b[:2]`、`b[2:]` 和 `b[:]` 分别是什么?

Expand Down