一维数组
package main
import "fmt"
//建立一个数组,可以储存五个学生的成绩并进行求和算平均值
func main() {
var scores [5]int //定义数组
scores[0] = 95
scores[1] = 91
scores[2] = 39
scores[3] = 60
scores[4] = 20
sum := 0
for i := 0; i < len(scores); i++ {
sum += scores[i]
}
avg := sum / len(scores)
fmt.Println(sum, avg)
}
数组每个空间占用的字节数取决于数组的数据类型
数组是值类型,在栈中开辟内存
数组优点:访问/查询/读取速度块
package main
import "fmt"
func main() {
//声明数组
var arr [5]int16
//获取数组长度
fmt.Println(len(arr))
//打印数组
fmt.Println(arr)
//获取arr存储的地址值
fmt.Printf("arr的地址值: %p\n", &arr)
//第一个空间的地址
fmt.Printf("arr[0]的地址值:%p\n", &arr[0])
//第二个空间的地址
fmt.Printf("arr[1]的地址值:%p\n", &arr[1])
//第三个空间的地址
fmt.Printf("arr[2]的地址值:%p\n", &arr[2])
//第四个空间的地址
fmt.Printf("arr[3]的地址值:%p\n", &arr[3])
//第五个空间的地址
fmt.Printf("arr[4]的地址值:%p\n", &arr[4])
}
数组遍历
1、普通for循环
2、for range结构
for key,val:=range coll{
}coll为所要遍历的数组
每次遍历得到的索引用key接收,每次遍历得到的索引位置上的值用val
key,value的名字可以随便起
key,value为在这个循环中的局部变量
如果想忽略key,value中的某一个值用_代替即可
package main
import "fmt"
func main() {
//实现的功能:给出五个学生的成绩,求出成绩的总和,平均数:
//给出五个学生的成绩:--->数组存储:
//定义一个数组
var scores [5]int
//将成绩录入数组
for i := 0; i < len(scores); i++ { //i:数组的下标
fmt.Printf("请录入第个%d学生的成绩", i+1)
fmt.Scanln(&scores[i])
}
//利用for range循环打印学生成绩
for key, value := range scores {
fmt.Printf("第%d个学生的成绩为:%d\n", key+1, value)
}
}
注意事项
1、长度属于类型的一部分
var arr1=[3]int{3,6,9}
数组的类型为[3]int
2、go的数组是值类型,在默认情况下是值传递,因此会进行值拷贝
package main
import "fmt"
func main() {
var arr3 = [3]int{3, 6, 9}
test1(arr3)
fmt.Println(arr3)
}
func test1(arr [3]int) {
arr[0] = 7
}
3、如果在其他函数中,去修改原来的数组,可以使用引用传递(指针)
package main
import "fmt"
func main() {
var arr3 = [3]int{3, 6, 9}
test1(&arr3)
fmt.Println(arr3)
}
func test1(arr *[3]int) {
(*arr)[0] = 7
}
二维数组
package main
import "fmt"
func main() {
var arr [2][3]int16
//定义一个二维数组初始值默认
fmt.Println(arr)
//输出arr的地址
fmt.Printf("arr的地址为:%p\n", &arr)
//输出arr[0]的地址
fmt.Printf("arr[0]的地址为:%p\n", &arr[0])
//输出arr[0][0]的地址
fmt.Printf("arr[0][0]的地址为:%p\n", &arr[0][0])
//输出arr[1]的地址
fmt.Printf("arr[1]的地址为:%p\n", &arr[1])
//输出arr[1][0]的地址
fmt.Printf("arr[1][0]的地址为:%p\n", &arr[1][0])
arr[0][1] = 47
//定义二维数组中的某几个,其余的值为0
arr[0][0] = 31
arr[1][2] = 39
fmt.Println(arr)
var arr2 = [2][3]int{{1, 2, 3}, {4, 5, 6}}
//二维数组内外两层都是大括号
fmt.Println(arr2)
}
二维数组遍历
package main
import "fmt"
func main() {
//定义一个二维数组
var arr1 = [3][3]int{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}
fmt.Println(arr1)
//利用for range
for key, value := range arr1 {
for k, v := range value {
fmt.Printf("arr[%v][%v]=%v\t", key, k, v)
}
fmt.Println()
}
//for range函数中的key 和 value 分别代表切片的下标及下标对应的值
//key表示是数组的第几行
//k表示是某行中的第几列
//\t是制表符,v是某行某列对应的值
}