第03天(复合类型)_03
2019-12-10 本文已影响0人
lucas777
13_数组做函数参数.go
package main //必须有个main包
import "fmt"
//数组做函数参数,它是值传递
//实参数组的每个元素给形参数组拷贝一份
//形参的数组是实参数组的复制品
func modify(a [5]int) {
a[0] = 666
fmt.Println("modify a = ", a)
}
func main() {
a := [5]int{1, 2, 3, 4, 5} //初始化
modify(a) //数组传递过去
fmt.Println("main: a = ", a)
}
14_数组指针做函数参数.go
package main //必须有个main包
import "fmt"
//p指向实现数组a,它是指向数组,它是数组指针
//*p代表指针所指向的内存,就是实参a
func modify(p *[5]int) {
(*p)[0] = 666
fmt.Println("modify *a = ", *p)
}
func main() {
a := [5]int{1, 2, 3, 4, 5} //初始化
modify(&a) //地址传递
fmt.Println("main: a = ", a)
}
15_切片的长度和容量.go
package main //必须有个main包
import "fmt"
func main() {
a := []int{1, 2, 3, 4, 5}
s := a[0:3:5]
fmt.Println("s = ", s)
fmt.Println("len(s) = ", len(s)) //长度 3-0
fmt.Println("cap(s) = ", cap(s)) //容量 5-0
s = a[1:4:5]
fmt.Println("s = ", s) //从下标1开始,取4-1=3个
fmt.Println("len(s) = ", len(s)) //长度 4-1
fmt.Println("cap(s) = ", cap(s)) //容量 5-1
}
16_切片的创建.go
package main //必须有个main包
import "fmt"
func main() {
//自动推导类型, 同时初始化
s1 := []int{1, 2, 3, 4}
fmt.Println("s1 = ", s1)
//借助make函数, 格式 make(切片类型, 长度, 容量)
s2 := make([]int, 5, 10)
fmt.Printf("len = %d, cap = %d\n", len(s2), cap(s2))
//没有指定容量,容量和长度一样
s3 := make([]int, 5)
fmt.Printf("len = %d, cap = %d\n", len(s3), cap(s3))
}
func main01() {
//切片和数组的区别
//数组[]里面的长度时固定的一个常量, 数组不能修改长度, len和cap永远都是5
a := [5]int{}
fmt.Printf("len = %d, cap = %d\n", len(a), cap(a))
//切片, []里面为空,或者为...,切片的长度或容易可以不固定
s := []int{}
fmt.Printf("1: len = %d, cap = %d\n", len(s), cap(s))
s = append(s, 11) //给切片末尾追加一个成员
fmt.Printf("append: len = %d, cap = %d\n", len(s), cap(s))
}
17_切片的截取.go
package main //必须有个main包
import "fmt"
func main() {
array := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
//[low:high:max] 取下标从low开始的元素, len=high-low, cap=max-low
s1 := array[:] //[0:len(array):len(array)] 不指定容量和长度一样
fmt.Println("s1 = ", s1)
fmt.Printf("len = %d, cap = %d\n", len(s1), cap(s1))
//操作某个元素,和数组操作方式一样
data := array[1]
fmt.Println("data = ", data)
s2 := array[3:6:7] //a[3], a[4], a[5] len = 6-3=3 cap = 7-3=4
fmt.Println("s2 = ", s2)
fmt.Printf("len = %d, cap = %d\n", len(s2), cap(s2))
s3 := array[:6] //从0开始,去6个元素,容量是10, 常用
fmt.Println("s3 = ", s3)
fmt.Printf("len = %d, cap = %d\n", len(s3), cap(s3))
s4 := array[3:] //从下标为3开始,到结尾
fmt.Println("s4 = ", s4)
fmt.Printf("len = %d, cap = %d\n", len(s4), cap(s4))
}