数组"/>
Go学习:数组
定义数组
数量写在类型前面
func main() {// 定义数组,只定义了数组元素的个数没有定义元素内容var arr1 [5]int// 初始化一个数组,元素个数写死arr2 := [3]int{1,3,5}// 元素个数用...表示,由编辑器确定数组元素个数arr3 := [...]int{2,4,6,8,0}fmt.Println(arr1,arr2,arr3)//[0 0 0 0 0] [1 3 5] [2 4 6 8 0]// 二维数组定义var grid [4][5]int fmt.Println(grid)// [[0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0]]}
数组遍历
使用数组下标进行遍历
func main() {arr3 := [...]int{2,4,6,8,0}for i:=0;i < len(arr3);i++{fmt.Print(arr3[i]," ") // 2 4 6 8 0 }
}
使用range关键字遍历
func main() {arr3 := [...]int{2,4,6,8,0}for i:= range arr3{fmt.Print(arr3[i]," ") // 2 4 6 8 0 }
}
同时获取元素和下标
func main() {arr3 := [...]int{2, 4, 6, 8, 0}// 如果不需要获取下标,i就用_表示for i, v := range arr3 {fmt.Println(i, v) }
}
// 0 2
// 1 4
// 2 6
// 3 8
// 4 0
为什么要使用range?
- 意义明确,美观
- c++没有类似的能力
- Java/Python:只能for each value,不能同时获取i,v
数组是值类型
func main() {var arr1 [5]intarr2 := [3]int{1, 3, 5}arr3 := [...]int{2, 4, 6, 8, 0}printArray(arr3) // 100 4 6 8 0 fmt.Println()for _, v := range arr3 {fmt.Print(v," ") // 2 4 6 8 0 }
}func printArray(arr [5]int){arr[0] = 100for _,v:= range arr{fmt.Print(v," ")}
}
- [5]int和[3]int不是同一个类型
- 数组是值类型,调用printArray函数时会拷贝数组;再printArray对数组的修改,不会影响调用者
- 再go语言中一般不直接使用数组
与指针搭配使用
func main() {var arr1 [5]intarr2 := [3]int{1, 3, 5}arr3 := [...]int{2, 4, 6, 8, 0}printArray1(&arr3)fmt.Println() // 100 4 6 8 0 for _, v := range arr3 {fmt.Print(v," ") // 100 4 6 8 0 }
}
func printArray1(arr *[5]int){arr[0] = 100for _,v:= range arr{fmt.Print(v," ")}
}
与指针搭配使用时,不会对数组进行拷贝,再函数内对数组的修改也会影响调用者
更多推荐
Go学习:数组
发布评论