首页 > 编程学习 > Golang入门笔记(15)—— 数组

Golang入门笔记(15)—— 数组

发布时间:2022/11/19 0:47:47

       编程的世界中,或许是因为一次一次的定义变量,维护管理起来都太费劲了,所以推出了数组,将数据用数组的形式管理起来。

参考代码:

package main

import "fmt"

func main() {

	var scores [5]int
	scores[0] = 90
	scores[1] = 91
	scores[2] = 92
	scores[3] = 93
	scores[4] = 94

	//求和,求平均
	sum := 0
	for i := 0; i < len(scores); i++ {
		sum += scores[i]
	}
	fmt.Println(sum)
	fmt.Println(sum / len(scores))

	fmt.Printf("scores 的地址,即第一个空间对应的地址 , %p \n", &scores)
	println("-------------- 16进制,每次大小间隔为8 ------------------")
	fmt.Printf("scores 第0个空间对应的地址 , %p \n", &scores[0])//scores 第0个空间对应的地址 , 0xc000010450
	fmt.Printf("scores 第1个空间对应的地址 , %p \n", &scores[1])//scores 第1个空间对应的地址 , 0xc000010458
	fmt.Printf("scores 第2个空间对应的地址 , %p \n", &scores[2])//scores 第2个空间对应的地址 , 0xc000010460
	fmt.Printf("scores 第3个空间对应的地址 , %p \n", &scores[3])//scores 第3个空间对应的地址 , 0xc000010468
	fmt.Printf("scores 第4个空间对应的地址 , %p \n", &scores[4])//scores 第4个空间对应的地址 , 0xc000010470
}

具体分析:

        16进制数,数组位置,每次大小偏移都是间隔为8,这个8就是每个元素的空间大小。         

关于更多关于数组的认知,可参考之前写的一篇帖子:CSDN

        下面做一个小demo:

package main

import "fmt"

func main() {

	//已知,班级中有10位同学,录入各同学成绩,计算得出总分和平均分。
	var scores [10]int
	//求和,求平均
	sum := 0
	for i := 0; i < len(scores); i++ {
		fmt.Printf("\n 请录入第%v个学生的成绩 \n", i+1)
		fmt.Scanln(&scores[i]) // 录入,改变数组中元素i的值,通过 & 绑定到哪个地址。
		sum += scores[i]
	}
	fmt.Println("总分:", sum)
	fmt.Println("平均分", sum/len(scores))

}

        数据遍历方式,除了使用上面代码中的以索引下标进行普通遍历外,还可以使用for range 遍历,for range 可以遍历数组,切片,字符串,map 以及通道,for range语法上类似于其他编程语法的foreach语句,形式如下:

for key,val:= range collection{
    ...
}

           代码如下:

package main

func main() {

	var scores [5]int
	scores[0] = 90
	scores[1] = 91
	scores[2] = 92

	for key, value := range scores {
        //key,value 属于当次循环的局部变量。
		println("[", key, "] ==> ", value)
	}


	for key, value := range scores {
        //key,value 属于当次循环的局部变量。
		println("[", key, "] ==> ", value)
	}

    // 如果用不到key,使用 下划线 “_” 可以忽略。
	for _, value := range scores {
		println( "==> ", value)
	}
}

     key,value 属于当次循环中的局部变量。

数组的初始化方式:

第一种:var 类型自己推断。

	var scores = [5] int {1,3,5,7,9}

第二种:事先不知道开辟多大空间。

	var scores = [...]int{1, 3, 5, 7, 9}

第三种:根据下标逐一赋值

	var scores = [...]int{0: 70, 2: 30, 3: 99, 4: 100}

数组的注意事项:

1.数组的长度属于类型的一部分,相当于动态数组的类属性。

	var a = [...]int{0: 70, 2: 30, 3: 99, 4: 100}
	fmt.Printf(" 数组类型:%T", a) // [5]int

2. Java中数组属于引用类型,但是在Go语言中,数组属于值类型的,默认情况下,按值传递,因此会进行值拷贝。如果想在其他函数中,去修改原来的数组,可以通过指针的方式进行引用传递。

Copyright © 2010-2022 dgrt.cn 版权所有 |关于我们| 联系方式