package main
import "fmt"
/**數(shù)組
* 定義數(shù)組數(shù)量在前類型在后
* 可以通過[...]來讓編譯器幫數(shù)有多少個
* 數(shù)組是值類型
* [5]int 和 [6]int是不同類型
* 調用func printArray(arr [5]int)會拷貝,go語言是值傳遞
* go語言中一般不直接使用數(shù)組,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//二維數(shù)組,表示有4行5列
? fmt.Println(grid)
//遍歷數(shù)組,普通方法
? 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)
}
}
//數(shù)組是值類型
func printArray(arr [5]int)? {
arr[0] =100
? for _,v :=range arr {
fmt.Println(v)
}
}
//通過指針改變數(shù)組值
func printArray1(arr *[5]int)? {
arr[0] =100
? for _,v :=range arr {
fmt.Println(v)
}
}
//通過slice改變數(shù)組值
func printArray2(arr []int)? {
arr[1] =88
? for _,v :=range arr {
fmt.Println(v)
}
}
/** slice (切片)
* 計算機中一般是半開半閉區(qū)間
* 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("通過指針改變數(shù)組值")
printArray1(&arr)
fmt.Println("arr")
fmt.Println(arr)
fmt.Println("通過slice改變數(shù)組值")
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擴展")
}