数组
数组是可以存放多个同一类型的数据。在GO中,数组是值类型。也是一种数据结构。
数组的简单案例:
func main() {
//定义一个数组
var hens [3]float64
//给数组每一个元素赋值 从下标为0开始 共3个元素
hens[0] = 1.0
hens[1] = 2.0
hens[2] = 3.0
//遍历数组
var totalWeight float64 = 0
for i := 0; i < 3; i++ {
totalWeight += hens[i]
}
//求出平均体重
avgWeight := fmt.Sprintf("%.2f", totalWeight/float64(len(hens)))
fmt.Printf("数组每个元素合计:%v,平均值为:%v", totalWeight, avgWeight)
}
数组的定义
var 数组名字 [数组大小]数组中数据类型
var a [5]int
数组a可以放5个int类型的数据。赋值:a[0]=1 a[1]=2 .....
- 数组的地址可以通过数组名获取 &变量名。
- 数组的第一个元素的地址,就是数组的地址。
- 数组的各个元素的地址间隔是依据数组的类型决定的,比如int64->8字节 int32->4字节....
四种初始化数组的方式
//方式1
var numArr01 [3]int = [3]int{1, 2, 3}
fmt.Println("numArr01=", numArr01)
//方式2
var numArr02 = [3]int{1, 2, 3}
fmt.Println("numArr02=", numArr02)
//方式3 这里的...是固定写法不能改
var numArr03 = [...]int{1, 2, 3}
fmt.Println("numArr03=", numArr03)
//方式4 索引值:索引对应的值
var numArr04 = [...]int{1: 100, 0: 200, 2: 300}
fmt.Println("numArr04=", numArr04)
//方式5 类型推导
numArr05 := [...]string{2: "tom", 1: "mary", 0: "jack"}
fmt.Println("numArr05=", numArr05)
数组的变量 for range
for range的基本语法
for index,value := range array{
....
}
- index是数组的下标。
- value是该下标位置的值。
- index和value仅在for循环内部可见的局部变量。
- 遍历数组的时候,如果不想使用index,可以直接把下标index标记为下划线_。
- index和value的名称不固定的,可以自己执行。
func main(){
//定义一个数组
var numArr04 = [...]int{1: 100, 0: 200, 2: 300}
//调用test方法
test(numArr04)
//索引为0的元素对应的值是200
//索引为1的元素对应的值是100
//索引为2的元素对应的值是300
}
func test(array [3]int) {
for index, value := range array {
fmt.Printf("索引为%d的元素对应的值是%v \n", index, value)
}
}
细节注意:
- 数组是多个相同的类型数据的组合,一个数组一旦声明或者定义了,其长度是固定的,不能动态变化。
- 数组中的元素可以是任何数据类型,包括值类似和引用类型,但是不能混用。
- 数组定义好以后,没有赋值,有默认值(零值)。
- 数组的下标从0开始,数组下标必须在指定的范围内使用,否则报panic:数组越界。比如:var arr [5]int,则有效下标[0-4]。
- 使用数组的步骤:声明数组并开辟空间;给数组各个元素赋值;使用数组。
- Go的数组是值传递,在默认情况下是值传递,因此会进行值拷贝。数组间不会影响。如果想在其他函数中去修改原来的数组,可以使用引用传递(指针方式)。
func main(){
//定义一个数组
var numArr04 = [...]int{1: 100, 0: 200, 2: 300}
fmt.Println("numArr04=", numArr04) //numArr04=[200,100,300]
test(&numArr04)
fmt.Println("numArr04=", numArr04)//numArr04=[9999,100,300]
}
//定义一个方式 改变数组中的值 注意:长度是数组类型的一部分,在传递函数参数时,需要考虑数组的长度。
func test(array *[3]int) {
for index, value := range *array {
fmt.Printf("索引为%d的元素对应的值是%v \n", index, value)
if index == 0 {
//修改索引为0的的位置上的元素值
(*array)[index] = 9999
}
}
}
标签:index,int,fmt,细节,numArr04,数组,使用,var
From: https://www.cnblogs.com/mafu-blogs/p/17980292