GoLang - 数组(Array)

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

  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

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