数组的使用和细节

数组
数组是可以存放多个同一类型的数据。在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 .....

  1. 数组的地址可以通过数组名获取 &变量名。
  2. 数组的第一个元素的地址,就是数组的地址。
  3. 数组的各个元素的地址间隔是依据数组的类型决定的,比如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{
    ....
}
  1. index是数组的下标。
  2. value是该下标位置的值。
  3. index和value仅在for循环内部可见的局部变量。
  4. 遍历数组的时候,如果不想使用index,可以直接把下标index标记为下划线_。
  5. 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)
	}
}

细节注意:

  1. 数组是多个相同的类型数据的组合,一个数组一旦声明或者定义了,其长度是固定的,不能动态变化。
  2. 数组中的元素可以是任何数据类型,包括值类似和引用类型,但是不能混用。
  3. 数组定义好以后,没有赋值,有默认值(零值)。
  4. 数组的下标从0开始,数组下标必须在指定的范围内使用,否则报panic:数组越界。比如:var arr [5]int,则有效下标[0-4]。
  5. 使用数组的步骤:声明数组并开辟空间;给数组各个元素赋值;使用数组。
  6. 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
		}
	}
}
posted @ 2024-01-23 11:09  程序马2023  阅读(40)  评论(0)    收藏  举报