Go语言(基础)——数组

1、前言

  • 在 Go 中,数组是基本数据类型, 数组的长度是固定的,长度是数组类型的一部分( [4]int 和 [5]int 是完全不同的类型);数组作为函数参数时,传递方式是值传递。

2、声明和初始化

2.1、数组的声明
var array [5]int
  • 上面声明的是一个长度为 5,存储的数据类型是 int 型的数组,现在这个数组还没有进行初始化,这个数组里存储的是系统默认的零值,即存储了 5 个 0。
  • 数组一旦声明后,数组的元素类型和长度都不能修改了。
2.2、数组的初始化
  • 刚刚声明的数组还没有初始化,接下来会介绍 5 种初始化数组的方法。
  1. 最一般的方法。
var array [5]int
array = [5]int{1, ,2 , 3, 4, 5}
  1. 声明数组的同时,初始化数组。
array := [5]int{1, 2, 3, 4, 5}
  1. 数组长度不确定,自动推导数组长度。
array := [...]int{1, 2, 3, 4, 5}
  1. 只在数组指定位置初始化。
array := [5]int{0, 1:2, 0, 3:4, 0}
  1. 第四种方法的简化版。
array := [5]int{1:2, 3:4}

3、二维数组

3.1、二维数组的声明和初始化
  • 在我看来,Go 语言中数组就是一种基本数据类型,所谓的二维数组,不过也就是一个存储的数据类型是数组的一维数组。
  • 声明并初始化一个二维数组。
var array = [2][3]int{[3]int{1, 2, 3}, [3]int{4, 5, 6}} //是不是能够体会到上面那句话的意思了
  • 简化版——声明并初始化一个二维数组。
array := [2][3]int{{1, 2, 3}, {4, 5, 6}}

4、指针数组

  • 顾名思义,指针数组就是指存储的数据类型是指针的数组。
4.1、指针数组的声明与初始化
  • 先声明指针数组。
array := [5]*int{}
  • 此时的指针数组还不能使用,原因就是还没有给指针数组内存储的指针分配空间,如果此时给指针数组里的数据赋值,会报错:“panic: runtime error: invalid memory address or nil pointer dereference”。
*array[2] = 7
  • 解决办法就是先给 array[2] 分配空间,再赋值。
array[2] = new(int)
*array[2] = 7
  • 输出 array
fmt.Println(array)

输出:[<nil> <nil> 0xc00000a0f0 <nil> <nil>]

5、数组的使用

5.1、作为函数参数——值传递
func Operator(array [5]int) {
	//修改数组索引位置为0的值
	array[0]++
}

func main() {
	array := [5]int{1, 2, 3, 4, 5}
	fmt.Println(array)
	Operator(array)
	fmt.Println(array)
}

输出:
[1 2 3 4 5]
[1 2 3 4 5]

  • PS:当数组非常大时,数组作为函数参数值传递,开销会非常大
5.2、作为函数参数——指针传递
func Operator(array *[5]int) {
	//修改数组索引位置为0的值
	array[0]++
}

func main() {
	array := [5]int{1, 2, 3, 4, 5}
	fmt.Println(array)
	Operator(array)
	fmt.Println(array)
}

输出:
[1 2 3 4 5]
[2 2 3 4 5]

6、总结

  • 在 Golang 中,直接使用数组是不常见的,更常见的用法是使用切片
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wuxy_Fansj_Forever

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值