分享
  1. 首页
  2. 文章

GoLang - 数组(Array)

凉丶心园 · · 1361 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

GoLang 提供了数组类型的数据结构。数组是 GoLang 编程中最常用的数据结构之一,指同一类型数据的有序集合。数组中包含的每个数据称为元素,一个数组包含的元素总数称为数组的长度。

GoLang 中的数组具有以下特点:

  1. 固定性——长度固定,无法扩容。
  2. 有序性——所有元素都有固定的整数下标(编号),第一个元素的下标为 0

数组声明

GoLang 中声明数组的语法如下:

var variable_name [SIZE] variable_type

以上为一维数组的定义方式。

例如以下定义了长度为 10 ,类型为 float32 的数组 nums :

var nums [10] float32

常用的多维数组可以这样定义:

var variable_name [SIZE1][SIZE2]...[SIZEN] variable_type

以下实例声明了三维的整型数组:

var threedim [5][10][4] int

注意,声明数组时,如果[ ]内部不是具体值(字面量)的话,则必须是常量,否则编译报错。实例如下:

//错误
var num1 int = 5
var a [num1] float32
//正确
const num2 int = 5
var b [num2] float32

数组初始化

以下演示了数组初始化:

var nums = [5]int32{1, 3, 5, 7, 9}

初始化数组中 { } 中的元素个数不能大于 [ ] 中的数字。如果忽略 [ ] 中的数字不设置数组大小,那么需要使用 ... 来填充 [ ] 内部,Go 编译器就会根据元素的个数来设置数组的大小。实例如下:

var nums = [...]int32{1, 3, 5, 7, 9}

这两种初始化方式是等价的。

数组初始化可以换行,但是要在换行规则允许的范围内,实例如下:

var a = [4]int{
 0, 
 1, 
 2, 
 3,
}
// 最后一个元素都必须加上逗号,否则编译报错
var b = [3][4]int{ 
 {0, 1, 2, 3}, 
 {4, 5, 6, 7}, 
 {8, 9, 10, 11}, 
}

如果最后一个元素不在后面加逗号,则应该写成这样。

var a = [3][4]int{ 
 {0, 1, 2, 3}, 
 {4, 5, 6, 7}, 
 {8, 9, 10, 11} } // 注意这个地方
//或
var b = [3][4]int{{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11}} // 可以全部写成一行

用这种方式初始化数组并不会导致数组长度发生变化,可用 len() 函方法测试。

访问数组元素

跟 C 语言一样,访问数组元素的方式是通过元素的下标访问。实例如下:

var nums = [5]int32{1, 3, 5, 7, 9}
var num int32 = nums[3] // 此时num的值为 7

注意,数组的类型与获取元素保存的变量的类型必须一致,否则编译报错。实例如下:

var nums = [5]int32{1, 3, 5, 7, 9}
var num float32 = nums[3] // 编译报错

访问二维数组的方式也 C 语言一样,实例如下:

var a = [3][4]int{ 
 {0, 1, 2, 3}, 
 {4, 5, 6, 7}, 
 {8, 9, 10, 11}, 
}
num := a[2][3] 
或
var num int = a[2][3] // 此时 num 的值为 11 ,访问的是数组 a 的第三行的第四个元素。

向函数传递数组

如果你想向函数传递数组参数,你需要在函数定义时,声明形参为数组,我们可以通过以下两种方式来声明:

1. 形参设定数组大小:

void myFunction(param [10]int){
 // ...
}

2. 形参未设定数组大小:

void myFunction(param []int){
 // ...
}




以上内容均源于网络,并加上自己的实践和理解,如有错误的地方,请在评论区指正。


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:凉丶心园

查看原文:GoLang - 数组(Array)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
1361 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏