[go学习笔记.第七章.数组和切片] 1.数组的快速入门,定义和内存布局

本文通过一个养鸡场的问题引出数组在编程中的必要性,传统方式的不便之处促使我们引入数组这一数据类型。在Go语言中,数组是一种值类型,可以存储相同类型的多个数据。文章详细介绍了如何定义和初始化数组,包括数组的内存布局、访问元素、初始化方式以及遍历操作。此外,还展示了如何通过数组来解决实际问题,例如计算鸡的总体重和平均体重,从而提高了代码的可维护性和清晰度。
摘要由CSDN通过智能技术生成

1.为什么需要数组

看一个问题:

一个养鸡场有6只鸡,体重分别为2kg,3kg,4kg,6kg,8kg,20kg,请问这6只鸡的总体重为多少? 平均体重为多少?

编写一个程序(引出数组)

使用传统方式:

package main

import (
	"fmt"
)

func main() {
	/**
	 * 一个养鸡场有6只鸡,体重分别为2kg,3kg,4kg,6kg,8kg,20kg,
	 * 请问这6只鸡的总体重为多少? 平均体重为多少?
	 * 编写一个程序  => 数组
	 */
	 //传统方式: 
	 //思路分析: 定义6个变量,分别表示六只鸡,然后求和,求出平均值
	 hen1 := 2.0
	 hen2 := 3.0
	 hen3 := 4.0
	 hen4 := 6.0
	 hen5 := 8.0
	 hen6 := 20.0
	 totalWeight := hen1 + hen2 +  hen3 + hen4 +  hen5 + hen6
	 // fmt.Sprintf("%.2f", totalWeight / 6) // 将totalWeight / 6四舍五入保存到小数点2位返回值
	 avgWeight := fmt.Sprintf("%.2f", totalWeight / 6)
	 fmt.Printf("totalWeight = %v, avgWeight = %v \n", totalWeight, avgWeight)
}

对上面代码说明:

1.使用传统的方法不利于数据的管理和维护

2.传统的方法不够灵活,因此引出新的数据类型:数组

2.数组的介绍

数组可以存放多个同一类型的数据,数组也是一种数据类型,在go语言中,数组是值类型

3.数组的快速入门

使用数组方式解决上面养鸡场问题  

package main

import (
	"fmt"
)

func main() {
	/**
	 * 一个养鸡场有6只鸡,体重分别为2kg,3kg,4kg,6kg,8kg,20kg,
	 * 请问这6只鸡的总体重为多少? 平均体重为多少?
	 * 编写一个程序  => 数组
	 */
	 //使用数组方式
	 //1.定义数组变量
	 var hens [6]float64
	 //2.给数组的每一个元素赋值,元素的下标从0开始,0~5
	 hens[0] = 2.0
	 hens[1] = 3.0
	 hens[2] = 4.0
	 hens[3] = 6.0
	 hens[4] = 8.0
	 hens[5] = 20.0
	 //3.遍历数组求出和
	 totalWeigh2 := 0.0
	 for i := 0; i <= len(hens); i++ {
		 totalWeigh2 += hens[i]
	 }
	 //4.平均值
	 avgWeight2 := fmt.Sprintf("%.2f", totalWeigh2 / float64(len(hens)))
	 fmt.Printf("totalWeight2 = %v, avgWeight2 = %v \n", totalWeigh2, avgWeight2)
}

对上面代码说明:

1.使用数组解决问题,程序的可维护性增加

2.代码更加清晰,容易扩展 

数组的定义和内存布局 

对上图的总结:

1.数字的地址可以通过数组名来获取:&intArr

2.数组的第一个元素的地址,就是数组的首地址

3.数组的各个元素的地址间隔是依据数组的类型决定的,比如:int64 => 8, int32 => 4

4.取一个数组中的数据,最快的速度是从内存地址中取,不过需要知道地址分配的规律

package main

import(
    "fmt"
)

func main() {
	var intArr [3]int	//int占8个字节
	//当我们定义完数组后,数组的各个元素都有默认值0
	fmt.Println(intArr)	
    intArr[0] = 10
	intArr[1] = 20
	intArr[2] = 30
	fmt.Printf("intArr的地址为: %p, intArr[0]的地址为:%p, intArr[1]的地址为:%p\n",
	 &intArr,&intArr[1],&intArr[2])
}

 4.数组的使用

1).访问数组元素

数组名[下标]

eg:使用数组的第三个元素: arr[2]

2).快速入门

package main

import(
    "fmt"
)

func main(){
    // 从终端循环输入5个成绩,保存到float64数组,并输出
	 var score [5]float64
	 for i := 0; i < len(score); i++ {
	 	fmt.Printf("请输入第%d个元素", i+ 1)
	 	fmt.Scanln(&score[i])
	 }	

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

 

3).四种初始化数组方式 

package main

import (
	"fmt"
)

func main() {
	// 四种初始化数组方式
	var numArr1 [3]int = [3]int{1,2,3}
	fmt.Println("numArr1=", numArr1)

	var numArr2 = [3]int{11,22,33}
	fmt.Println("numArr2=", numArr2)

	//[...]是固定写法
	var numArr3 = [...]int{1: 111,2: 222,0: 333}
	fmt.Println("numArr3=", numArr3)

	var numArr4 = [...]int{12, 23, 34}
	fmt.Println("numArr4=", numArr4)

	//类型推导
	strArr5 := [...]string{1:"tom", 0: "jack", 3: "mary"}
	fmt.Println("strArr5=", strArr5)
}

 [上一节][go学习笔记.第六章.函数.练习] 编写一个函数:输出小写的a-z以及大写的A-Z,使用for循环

[下一节][go学习笔记.第七章.数组和切片] 2.数组的遍历,注意事项和细节以及数组的应用实例 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值