Go语言(基础)——数组

数组的基本介绍

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

声明和初始化

数组的声明

var array [5]int
  • 上面声明的是一个长度为 5,存储的数据类型是 int 型的数组,现在这个数组还没有进行初始化,现在这个数组里存储的是系统默认的零值,即存储了 5 个 0。
  • 数组一旦声明后,数组的元素类型和长度都不能修改了。

数组的初始化

  • 刚刚声明的数组还没有初始化,接下来会介绍 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, 2, 0, 3:4, 0}
  1. 第四种方法的简化版。
array := [5]int{
    
    1:2, 3:4}

二维数组

二维数组的声明和初始化

  • 在我看来,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}}

指针数组

  • 顾名思义,指针数组就是指存储的数据类型是指针的数组。

指针数组的声明与初始化

  • 先声明指针数组。
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>]

数组的使用

作为函数参数——值传递

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:当数组非常大时,数组作为函数参数值传递,开销会非常大

作为函数参数——指针传递

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]

总结

  • 在 Golang 中,直接使用数组是不常见的,更常见的用法是使用切片

猜你喜欢

转载自blog.csdn.net/wxy_csdn_world/article/details/115068827