【GO-数组】

这篇博客介绍了Go语言中数组的基本概念、定义、初始化方式以及常用的数组操作,包括求和、平均值、遍历、内存布局分析。示例代码展示了如何从终端输入成绩并输出,以及如何找到数组的最大值、计算平均值。此外,还演示了数组反转的实现方法,通过随机生成数组并进行反转展示其过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、简介

数组可以存放多个同一类型数据,数组也是一种数据类型,数值是值类型。

二、数组定义

数组求和求平均

package	main

import (
	"fmt"
)

func main() {
	//定义一个数组,4个元素
	var hens [4]float64;
	//给数组的每个元素赋值
	hens[0] = 1.1
	hens[1] = 22.2
	hens[2] = 2.5
	hens[3] = 5.4
	//遍历数组求总体重
	Weight := 0.0
	for i :=0; i < len(hens);i++{
		Weight += hens[i]
	}
	Averageweight := fmt.Sprintf("%.2f", Weight / 6) 
	fmt.Printf("总体重%.2f,平均体重%v", Weight, Averageweight)
}

输出

PS D:\goproject\src\go_code\chaptor7_array\demo01> go run .\main.go
总体重31.20,平均体重5.20

内存布局

数组的地址可以通过数组名获取,&intArr
数组的第一个元素的地址,就是数组的首地址
数组的各个元素的地址间隔是依据数组的类型决定,比如int64->8,int32->4

package main 
import (
	"fmt"
)


func main() {
	var intArr [3]int
	fmt.Println(intArr)    //默认是0
	fmt.Printf("intArr的地址=%p, 第一个元素的地址=%p", &intArr, &intArr[0])  //数组的地址和第一个元素的地址一样
}

输出

PS D:\goproject\src\go_code\chaptor7_array\demo2> go run .\main.go
[0 0 0]
intArr的地址=0xc000016198, 第一个元素的地址=0xc000016198

三、数组的几种初始化方式

	var score1 [3]int = [3]int {1, 2, 3}
	var score2 = [3]int {1, 2, 3}
	var score3 = [...]int {1, 2, 3}
	var names = [3]string{1:"TOM", 0:"JACK", 2:"MARRY"}   //指定元素值对应的下标

四、for-range遍历for index, value := range ayyay01 {}

1、第一个返回值index是数组得下标;
2、第二个value是改下标的值;
3、他们都是仅在for循环内部可见的局部变量;
4、遍历数组元素的时候,如果不想使用下标index,可以使用_;
5、index和value的名称不是固定的。

package main
import (
	"fmt"
)

func main() {
	var heroes [3]string = [...]string{"宋江", "武松", "鲁智深"}
	for i, v := range heroes {
		fmt.Printf("i=%v, v=%v\n", i, v)
	}
	for _, v := range heroes {   //不需要index
		fmt.Printf("v=%v\n", v)
	}
}

输出

PS D:\goproject\src\go_code\chaptor7_array\demo4> go run .\main.go
i=0, v=宋江
i=1, v=武松
i=2, v=鲁智深
v=宋江
v=武松
v=鲁智深

五、数组的使用

从终端循环输入5个成绩,保存到float数组,并输出

package main 
import (
	"fmt"
)


func main() {
	var score [5]float64

	for i := 0; i < len(score); i++ {
		fmt.Printf("输入第%d个元素的值\n", i+1)
		fmt.Scanln(&score[i])
	}

	for i := 0; i < len(score); i++ {
		fmt.Printf("score[%d]=%v", i, score[i])
	}
}

输出

PS D:\goproject\src\go_code\chaptor7_array\demo3> go run .\main.go
输入第1个元素的值
5.2
输入第2个元素的值
4.2
输入第3个元素的值
85.21
输入第4个元素的值
4.1
输入第5个元素的值
5.0
score[0]=5.2score[1]=4.2score[2]=85.21score[3]=4.1score[4]=5

循环输出26个大写字母

package main

import (
	"fmt"
)

func main() {
	var myChars [26]byte
	for i:= 0; i < 26; i++ {
		myChars[i] = 'A' + byte(i)  //int转byte
		fmt.Printf("%c ", myChars[i])
	}
}

输出

PS D:\goproject\src\go_code\chaptor7_array\arrexercise01> go run .\main.go    
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 

求数组最大值

package main

import (
	"fmt"
)

func main() {
	var intArr [5]int = [...]int {1, 5, -8, 6, 4}
	maxVal := intArr[0]
	maxValIndex := 0
	for i := 1; i < len(intArr); i++ {
		if maxVal < intArr[i] {
			maxVal = intArr[i]
			maxValIndex = i
		}
	} 
	fmt.Printf("最大值是%v,最大值下标为%v", maxVal, maxValIndex)
}

输出

PS D:\goproject\src\go_code\chaptor7_array\arrexercise01> go run .\main.go
最大值是6,最大值下标为3

求数组的和、平均值

package main

import (
	"fmt"
)

func main() {
	var intArr [5]int = [...]int {1, 5, -8, 6, 4}
    sum := 0
	for _, v := range intArr {
		sum += v
	}
	//平均值取小数
	fmt.Printf("sum=%v,avg=%v", sum, float64(sum) / float64(len(intArr)) )
}

输出

PS D:\goproject\src\go_code\chaptor7_array\arrexercise01> go run .\main.go
sum=8,avg=1.6

六、数组反转

package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	//随机生成五个数,rand.Intn()
	var intArr [5]int
	//为了每次生成的随机数不一样,我们需要给一个seed值
	rand.Seed(time.Now().Unix())
	for i := 0; i < 5; i++ {
		intArr[i] = rand.Intn(100)   //0<=n<100的数
	} 
	fmt.Println(intArr)

	tmp := 0 //临时变量
	for j := 0; j < len(intArr)/2; j++ {
		tmp = intArr[len(intArr) -1 -j]
		intArr[len(intArr) -1 -j] = intArr[j]
		intArr[j] = tmp
	}
	fmt.Println(intArr)
}

输出

PS D:\goproject\src\go_code\chaptor7_array\arrexercise02> go run .\main.go
[39 34 78 56 43]
[43 56 78 34 39]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值