【go基础】数组

文章介绍了Go语言中数组的定义,强调了数组长度的固定性以及其作为值类型的特点。文中详细展示了数组的初始化方法,包括完整初始化和部分初始化,并解释了数组的内存布局,指出数组元素的地址间隔由元素类型决定。此外,还讨论了数组的赋值、默认值以及两种遍历数组的方法:常规遍历和for-range结构遍历。最后提到了数组在函数传递中的行为和切片(slice)的概念。
摘要由CSDN通过智能技术生成

数组定义和内存布局

数组是多个相同类型数据的组合,一个数组一旦声明/定义了,其长度是固定的, 不能动态变化。
数组可以存放多个同一类型数据。数组也是一种数据类型,在 Go 中,数组是值类型。使用数组来解决问题,程序的可维护性增加,代码更加清晰,也容易扩展。
数组中的元素可以是任何数据类型,包括值类型和引用类型,但是不能混用。
数组的定义

var 数组名 [数组大小]数据类型

var a [5]int

数组的初始化

	var numArr01 [3]int = [3]int{1, 2, 3}
	fmt.Println("numArr01=", numArr01)

	var numArr02 = [3]int{5, 6, 7}
	fmt.Println("numArr02=", numArr02)
var numArr03 = [...]int{8, 9, 10}
	fmt.Println("numArr03=", numArr03)

	var numArr04 = [...]int{1: 800, 0: 900, 2: 999}
	fmt.Println("numArr04=", numArr04)
//类型推导
	strArr05 := [...]string{1: "tom", 0: "jack", 2: "mary"}
	fmt.Println("strArr05=", strArr05)

数组的赋值

a[0] = 1 a[1] = 30 ....

数组的内存布局

  1. 数组的地址可以通过数组名来获取 &intArr
  2. 数组的第一个元素的地址,就是数组的首地址
  3. 数组的各个元素的地址间隔是依据数组的类型决定,比如 int64 -> 8 int32->4…
    4)数组的下标是从 0 开始的
    数组下标必须在指定范围内使用,否则报 panic:数组越界,比如var arr [5]int 则有效下标为 0-4
var intArr [3]int //int占16个字节
	//当我们定义完数组后,其实数组的各个元素有默认值 0
	fmt.Println(intArr)
	intArr[0] = 10
	intArr[1] = 20
	intArr[2] = 30
	fmt.Println(intArr)
	fmt.Printf("intArr的地址=%p intArr[0] 地址%p intArr[1] 地址%p intArr[2] 地址%p\n", 
		&intArr, &intArr[0], &intArr[1], &intArr[2])

数组的使用

使用数组的步骤

  1. 声明数组并开辟空间
  2. 给数组各个元素赋值(数组创建后,如果没有赋值,有默认值(零值))
  3. 使用数组

数组名[下标] : 要使用 a 数组的第三个元素 a[2]

数组的默认值

  • 数值类型数组:默认值为 0
  • 字符串数组: 默认值为 “”
  • bool 数组: 默认值为 false
//数组创建后,如果没有赋值,有默认值(零值)
	//1. 数值(整数系列, 浮点数系列) =>0
	//2. 字符串 ==> ""
	//3. 布尔类型 ==> false

	var arr01 [3]float32
	var arr02 [3]string
	var arr03 [3]bool
	fmt.Printf("arr01=%v arr02=%v arr03=%v\n", arr01, arr02, arr03)

数组的遍历

常规遍历

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

for-range 结构遍历

var intArr2 [5]int = [...]int {1, -1, 9, 90, 12}
	sum := 0
	for _, val := range intArr2 {
		//累计求和
		sum += val
	}

Go 的数组属值类型, 在默认情况下是值传递, 因此会进行值拷贝。数组间不会相互影响
如想在其它函数中,去修改原来的数组,可以使用引用传递(指针方式)
长度是数组类型的一部分,在传递函数参数时 需要考虑数组的长度

var arr []int 这时 arr 就是一个 slice 切片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值