package main
import "fmt"
/**数组
* 定义数组数量在前类型在后
* 可以通过[...]来让编译器帮数有多少个
* 数组是值类型
* [5]int 和 [6]int是不同类型
* 调用func printArray(arr [5]int)会拷贝,go语言是值传递
* go语言中一般不直接使用数组,go语言使用的是slice
*/
func arrays() {
var arr [5]int
arr1 := [3]int{1,2,3}
arr2 := [...]int{1,2,3,4,5,6}
fmt.Println(arr,arr1,arr2)
var grid [4][5]int//二维数组,表示有4行5列
fmt.Println(grid)
//遍历数组,普通方法
for i :=0;i < len(arr2) ;i++ {
fmt.Println(i,arr2[i])
}
fmt.Println("range")
//使用range关键字
for i,v :=range arr2 {
fmt.Println(i,v)
}
fmt.Println("_____")
//"_"跳过某一个值
for _,v :=range arr2 {
fmt.Println(v)
}
fmt.Println("只取下标")
//只取下标
for i :=range arr1 {
fmt.Println(i)
}
}
//数组是值类型
func printArray(arr [5]int) {
arr[0] =100
for _,v :=range arr {
fmt.Println(v)
}
}
//通过指针改变数组值
func printArray1(arr *[5]int) {
arr[0] =100
for _,v :=range arr {
fmt.Println(v)
}
}
//通过slice改变数组值
func printArray2(arr []int) {
arr[1] =88
for _,v :=range arr {
fmt.Println(v)
}
}
/** slice (切片)
* 计算机中一般是半开半闭区间
* slice不是值类型,slice是对array的一个视图
*/
func studySlice() {
arr := [...]int{0,1,2,3,4,5,6,7}
fmt.Println(arr[2:6])
fmt.Println(arr[:6])
fmt.Println(arr[2:])
fmt.Println(arr[:])
}
func updateSlice(arr []int) {
arr[0] =99
}
func main() {
arrays()
fmt.Println("printArray(arr)")
var arr [5]int
printArray(arr)
fmt.Println("arr")
fmt.Println(arr)
fmt.Println("通过指针改变数组值")
printArray1(&arr)
fmt.Println("arr")
fmt.Println(arr)
fmt.Println("通过slice改变数组值")
printArray2(arr[:])
fmt.Println("arr")
fmt.Println(arr)
fmt.Println("studySlice")
studySlice()
arr1 := [...]int{0,1,2,3,4,5,6,7}
s1 := arr1[2:6]
//s2 := arr1[:6]
//s3 := arr1[2:]
//s4 := arr1[:]
fmt.Println("切片之后")
updateSlice(s1)
fmt.Println(s1)
fmt.Println(arr1)
fmt.Println("Reslice")
fmt.Println(s1)
s1 = s1[:4]
fmt.Println(s1)
s1 = s1[2:]
fmt.Println(s1)
//slice扩展
fmt.Println("slice扩展")
}