昨天 学习了字典和字符串,今天学习数组和切片:
package main
import (
"fmt"
)
func main(){
fmt.Println("Happy 2020/12/19")
//一、数组
//定义数组,是包含长度的
var arr1 = [5]int{}
var arr2 = [5]int{1,2,3,4,5}
var arr3 = [5]int{3:10}
fmt.Println(arr1, arr2, arr3)
//操作数据
for i := 0; i < len(arr1); i++{
arr1[i] = i * 10
}
fmt.Println(arr1)
for index, value := range arr1{
fmt.Printf("index:%d, value: %d\n", index, value)
}
//多维数组
var arr4 = [5][5]int{
{1,2,3,4,5},
{6,7,8,9,10},
}
fmt.Println(arr4)
//数组作为函数参数
//go在传递数组时会对其进行拷贝,若传递的数组非常大会很占内存,所以一般情况下
//很少直接传递一个数组,而是传递数组的指针或者切片
var a[5]int
fmt.Println("初始的a:", a)
test(a)
fmt.Println("函数外:", a)
//指针数组:指针的数组
var b [5]*int
fmt.Println("b:",b)
for i := 0; i < 5; i++{
temp := i
b[i] = &temp //为指针数组初始化赋值
}
for i := 0; i < 5; i++{
fmt.Print(" ", *b[i])
}
fmt.Println()
test1(b)
fmt.Println("函数外:")
for i := 0; i < 5; i++{
fmt.Print(" ", *b[i])
}
//数组指针:数组的指针
var c [5]int
var cPtr *[5]int
cPtr = &c
//也可直接: cPtr := &c
fmt.Println("\n",cPtr)
test2(cPtr)
fmt.Println(cPtr)
//二、切片 与数组操作类似,比数组灵活,长度不固定
//定义切片,不需要为其指定长度
var s0 []int
var s1 = []int{}
var s2 = []int{1,2,3}
var s3 = make([]int, 5)
var s4 = make([]int, 5, 10) //声明了一个长度为5容量为10的切片
//可通过len()和cap()获取长度和容量
fmt.Println(s0)
fmt.Println(s1)
fmt.Println(s3)
fmt.Println(len(s2),cap(s2))
fmt.Println(len(s4),cap(s4))
//切片操作,包左不包右
array := []int{1,2,3,4,5}
array1 := array[2:4]
array2 := array[2:]
array3 := array[:3]
fmt.Println(array1)
fmt.Println(array2)
fmt.Println(array3)
//切片的扩充
fmt.Println(array)
array = append(array, 100)
fmt.Println(array)
//切片的拼接
sa := []int{1,2,3}
sb := sa[1:3]
fmt.Println(sb)
sa = append(sa, sb...)
fmt.Println(sa)
//切片的复制
ssa := []int{1,2,3}
ssb := make([]int, 3)
copy(ssb, ssa)
fmt.Println(ssa)
fmt.Println(ssb)
ssc := make([]int, 4)
copy(ssc, ssa)
fmt.Println(ssc)
ssd := make([]int, 2)
copy(ssd, ssa)
fmt.Println(ssd)
}
func test(a [5]int){
a[1] = 100
fmt.Println("函数内:", a)
}
func test1(b [5]*int){
*b[1] = 100
fmt.Println("函数内:")
for index := range b{
fmt.Print(" ", *b[index])
}
fmt.Println()
}
func test2(cPtr *[5]int){
cPtr[2] = 100
fmt.Println(cPtr)
}