1.数组:同一种数据类型的固定长度的序列。
2.数组定义:var a [len]int,例如:var a [5]int
3.长度是数组类型的一部分,因此,var a[5] int 和 var a[10]int 是不同的类型
4.数组可以通过下标进行访问,下标是从0开始,最后一个元素是len-1
for i:=0;i<len(a);i++{
}
5.访问越界,如果下标在数组合法范围之外,就会触发越界,panic异常
package main
import "fmt"
func main() {
var a [10]int
a[0] = 100
fmt.Println(a)
for i := 0; i < len(a); i++ {
fmt.Println(a[i])
}
for index, val := range a {
fmt.Printf("a[%d]==%d\n", index, val)
}
}
6.数组是值类型,因此改变副本的值,不会改变本身的值
package main
import "fmt"
func test2() {
var a [10]int
b := a
b[0] = 100
fmt.Println(a)
}
//传递指针
func test3(arr *[5]int) {
(*arr)[0] = 1000
}
func main() {
//test2()
var a [5]int
//传 地址,改变 值类型
test3(&a)
fmt.Println(a)
}
7.费波纳茨数列
package main
import "fmt"
//菲波那切数列,非递归方式实现,打印前50个数
func fab(n int){
var a[]uint64
a = make([]uint64,n)
a[0]=1
a[1]=1
for i:=2;i<n;i++{
a[i]=a[i-1]+a[i-2]
}
for _,v:=range a{
fmt.Println(v)
}
}
func main(){
fab(50)
}
8.声明数组,遍历数组
package main
import "fmt"
//数组的初始化
func testArray() {
var a [5]int = [5]int{1, 2, 3, 4, 5}
var a1 = [5]int{1, 2, 3, 4, 5}
var a2 = [...]int{38, 283, 48, 38, 348, 387, 484}
var a3 = [...]int{1: 100, 3: 200}
var a4 = [...]string{1: "hello", 3: "world"}
fmt.Println(a)
fmt.Println(a1)
fmt.Println(a2)
fmt.Println(a3)
fmt.Println(a4)
}
//多维数组
func muchArray() {
//两行五列的数组
var a [2][5]int = [...][5]int{{1, 2, 3, 4, 5}, {7, 8, 9, 11, 12}}
for row,v:=range a{
for col,v1:=range v{
fmt.Printf("(%d,%d)=%d\n",row,col,v1)
}
}
}
func main() {
//testArray()
muchArray()
}