diff --git a/day02/array/README.md b/day02/array/README.md index 465fa8d..34aa0dd 100644 --- a/day02/array/README.md +++ b/day02/array/README.md @@ -48,5 +48,46 @@ arr[1] = 2 arr[2] = 3 ``` -## 子针数组(重要: 95%) +## 数组拷贝 +go 默认就是值拷贝, = 赋值 也是 值copy + +1. 浅拷贝: 创建一个新数组,新数组的元素和原数组的元素是相同的,但是两个数组的元素是两个不同的对象 + +```go +func main() { + // ipv4 4字节表示一个ipv4地址, 简短声明: 127.0.0.1 + ip := [4]byte{127, 0, 0, 1} + fmt.Println("ip1:", ip) + + // 如何copy这个数组, 这个赋值有没有完成copy + // 怎么理解数组的复制 是值拷贝 + // + // a := 1 + // b := a + // b = 2 + // fmt.Println("a:", a) + // fmt.Println("b:", b) + // 数组: 一片连续的地址控制 + // ip2 := ip (ip 有自己连续的地址空间) + // ip2[4]byte{} (ip2 申请的连续地址) + // Go 默认是值拷贝(重要) + // ip 的值 传递给 ip2 + // ip2 和 ip 是两个不同的数组, 互不影响 + + ip2 := ip + fmt.Println("ip2:", ip2) + + // 修改ip2 不会影响ip + ip2[0] = 10 + fmt.Println("ip1:", ip) + fmt.Println("ip2:", ip2) +} +``` + +## 数组遍历 + +1. 循环遍历(for) +```go + +``` \ No newline at end of file diff --git a/day02/array/main.go b/day02/array/main.go new file mode 100644 index 0000000..b57a02c --- /dev/null +++ b/day02/array/main.go @@ -0,0 +1,53 @@ +package main + +import "fmt" + +func main() { + /* + 数组拷贝 + */ + // ipv4 4字节表示一个ipv4地址, 简短声明: 127.0.0.1 + ip := [4]byte{127, 0, 0, 1} + fmt.Println("ip1:", ip) + + // 如何copy这个数组, 这个赋值有没有完成copy + // 怎么理解数组的复制 是值拷贝 + // + // a := 1 + // b := a + // b = 2 + // fmt.Println("a:", a) + // fmt.Println("b:", b) + // 数组: 一片连续的地址控制 + // ip2 := ip (ip 有自己连续的地址空间) + // ip2[4]byte{} (ip2 申请的连续地址) + // Go 默认是值拷贝(重要) + // ip 的值 传递给 ip2 + // ip2 和 ip 是两个不同的数组, 互不影响 + + ip2 := ip + fmt.Println("ip2:", ip2) + + // 修改ip2 不会影响ip + ip2[0] = 10 + fmt.Println("ip1:", ip) + fmt.Println("ip2:", ip2) + + /* + 数组遍历 + */ + // 1. 通用遍历法(不局限于数组, 切片, map, 字符串) + // 对象的编号,通常叫索引, index (0, ...) + // (0, 1, 2, 3) + // 1. for : 定义变量(开始元素的索引,0), 条件(循环结束条件, 不满足条件,结束循环), 变化(索引加1, 找下一个元素) + // len 函数: 求数组的长度 + // 127 0 0 1 + // for i := 0; i < len(ip); i++ { + // fmt.Println(ip[i]) + // } + // range 专用遍历法, 语法糖,更简洁, 自动处理索引的变化 + for i := range len(ip) { + fmt.Println(ip[i]) + } + +} diff --git a/day02/array/prt_array.drawio b/day02/array/prt_array.drawio new file mode 100644 index 0000000..03a3b6f --- /dev/null +++ b/day02/array/prt_array.drawio @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/day02/struct/README.md b/day02/struct/README.md new file mode 100644 index 0000000..9c0aadd --- /dev/null +++ b/day02/struct/README.md @@ -0,0 +1,20 @@ +# 结构体 + + +## 子针数组(重要: 95%) + +指针数组: 创建一个数组,里面存放指针,指针指向数组的某一个元素 + +盒子(数组)里面的插槽,嵌套盒子(指针)的模式 + + +```go +type Person struct {} + +// +[]*Person{} +``` + + +## 子针数组的copy +