Go语言入门-常用数据结构之数组

这篇博客介绍了Go语言中的数组数据结构,包括数组的定义、初始化、遍历、赋值与传递、内置函数len和cap的使用,以及数组与指针的关系。重点讨论了数组的固定长度、类型一致性、下标访问以及如何通过for循环和for range遍历数组。此外,还阐述了如何使用指针来修改数组内容。
摘要由CSDN通过智能技术生成

Go语言入门-常用数据结构之数组

定义

概述

An array is a numbered sequence of elements of a single type, called the element type. The number of elements is called the length of the array and is never negative.-数组是单一类型元素(元素类型)组成并且被编号序列。 元素的数量称为数组的长度,绝不能为负。
这句话体现数组的几个特点:

  1. 数组中元素的类型是一致的
  2. 数组中元素是被编号的(具备下标)
  3. 数组有长度

实际上除了以上特点之外数组还有以下特性:

  1. 数组的长度是固定的,因此在数组定义的时候确定,确定后无法改变
  2. 长度是数据类型的组成部分。当元素类型相同,长度不相同时,不是同一类型。
  3. 数组可以通过下标进行访问,下标是从0开始,最后一个元素下标是:len-1,访问越界(下标在合法范围之外),则触发访问越界,会panic。
  4. 数组是值类型。赋值和传递参数是整个数组。而不是指针。—此处重点。

数组定义

数据定义语法
var ArrayName [ArrayLength]Type
数组定义示例
  • 简单示例1
func main() {
   
    
    //var ArrayName [ArrayLength]Type
    var arr1 [4]int
    var arr2 [5]int
    var arr3 [unsafe.Sizeof(arr1)]int //长度可以不是常量,但是编译时能够确认
    fmt.Println(arr1)
    fmt.Println(arr2)
    fmt.Println(arr3)
}
/**
output:
[0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 */

数组的长度不一定常量,但是一定是需要在编译器编译能够确认。

数据类型

长度是数据类型的组成部分。当元素类型相同,长度不相同时,不是同一类型

  • 简单示例1
func main() {
   
    var arr1 [4]int
    var arr2 [5]int
    var arr3 [5]int
    fmt.Printf("arr1 type: %T\n", arr1)
    fmt.Printf("arr2 type: %T\n", arr2)
    fmt.Printf("arr3 type: %T\n", arr3)
    //编译报错:类型不一样无法赋值
    //arr1 = arr2 //Cannot use 'arr2' (type [5]int) as type [4]int in assignment
    
    //类型相同可以赋值
    arr2[0] = 10
    fmt.Println(arr3)
    arr3 = arr2
    fmt.Println(arr2)
    fmt.Println(arr3)
}

/**
output:
arr1 type: [4]int
arr2 type: [5]int
arr3 type: [5]int
[0 0 0 0 0]
[10 0 0 0 0]
[10 0 0 0 0]
 */
进阶-多维数组

数组中嵌套数组
基本定义如下:

//多维数组
func main() {
   
    var arrays2 [5][4]int //二维数组
    var arrays3 [2][2][3]int //三维数组
    fmt.Println(arrays2)
    fmt.Println(arrays3)
}
/**output:
[[0 0 0 0] [0 0 0 0] [0 0 0 0] [0 0 0 0] [0 0 0 0]]
[[[0 0 0] [0 0 0]] [[0 0 0] [0 0 0]]]
 */

数组初始化

一维数组
列表表达式初始化-基本
  • 示例1
func main() {
   
    var arr1 [3]int //定义数组,基础值被清零
    var arr2 = [5]int{
   3,1} //初始化表达式初始化,由于长度是5,只初始化前两位
    var arr3 = [4]string{
   "int", "float", "string"} //初始化列表表达式,只初始化前3位置
    fmt.Println(arr1)
    fmt.Println(arr2)
    fmt.Println(arr3)
}
/**
output:
[0 0 0]
[3 1 0 0 0]
[int float string ]
 */
列表表达式初始化-自动推导数组长度

使用初始表示式中的时候可以使用[…]Type{}自动推断数组长度。

  • 示例1
func main
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值