目录

文章目录

  • 目录
  • 数组
  • 定义数组
  • 数组与切片的区别
  • 访问数组元素
  • 多维数组
    • 初始化二维数组
    • 访问二维数组
  • 向函数传递数组
  • 指针数组

数组

数组是具有相同数据类型的一组已编号且长度固定的数据项序列,可以是任意的原始数据类型也可以是自定义的数据类型。数组元素可以通过索引(位置)来读取(或者修改),索引从 0 开始,第一个元素索引为 0,第二个索引为 1,以此类推。

定义数组

Golang 数组声明需要指定元素类型及元素个数,使用中括号 [] 来进行声明,格式如下:

// 声明
var variable_name[SIZE] variable_type// 初始化
var balance = [5]float32 {1000.0, 2.0, 3.4, 7.0, 50.0}

示例:

package mainimport "fmt"func main() {var balance[5] intbalance = [5]int {1000, 2, 3, 17, 50}// 或者简写为:// var balance = [5]int {1000, 2, 3, 17, 50}for i := 0; i < 5; i++ {fmt.Println(balance[i])}
}

注意,初始化数组中 {} 中的元素个数不能大于 [] 中的数字。

数组与切片的区别

Golang 只是省略指定元素的个数,使用 [...][] 来表示,创建一个特殊的 “数组”,编译器会根据元素的个数来设置 “数组” 的大小。需要注意的是,当我们不指定元素个数的时候,实际上创建的是切片数据类型,而非数组,因为 Golang 中定义的数组,其长度总是固定的。

var balance = [...] float32 {1000.0, 2.0, 3.4, 7.0, 50.0}
// or
var balance = []float32 {1000.0, 2.0, 3.4, 7.0, 50.0}

访问数组元素

数组元素可以通过索引(位置)来读取。格式为数组名后加中括号,中括号中为索引的值。例如:

  • 更改指定元素的数值:
balance[4] = 50.0
  • 读取指定元素的数值:
var salary float32 = balance[9]

示例:

package mainimport "fmt"func main() {var n[10] intfor i := 0; i < 10; i++ {n[i] = i + 100}for j := 0; j < 10; j++ {fmt.Printf("Element[%d] = %d\n", j, n[j])}
}

结果:

Element[0] = 100
Element[1] = 101
Element[2] = 102
Element[3] = 103
Element[4] = 104
Element[5] = 105
Element[6] = 106
Element[7] = 107
Element[8] = 108
Element[9] = 109

多维数组

多维数组定义格式:

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

二维数组是常见的多维数组类型,定义方式如下:

var arrayName[行][列] variable_type

初始化二维数组

a = [3][4]int { {0, 1, 2, 3} ,    /* 第一行索引为 0 */{4, 5, 6, 7} ,    /* 第二行索引为 1 */{8, 9, 10, 11},   /* 第三行索引为 2 */
}

访问二维数组

二维数组通过指定坐标来访问。如数组中的行索引与列索引,例如:

val := a[2][3]
// or
var value int = a[2][3]

示例:

package mainimport "fmt"func main() {var a = [5][2]int{{0, 0},{1, 2},{2, 4},{3, 6},{4, 8},    // 注意这里必须要加上逗号 ”,“,因为 Golang 编译器会自动补全 ”;“ 号。}for  i := 0; i < 5; i++ {for j := 0; j < 2; j++ {fmt.Printf("a[%d][%d] = %d\n", i,j, a[i][j] )}}
}

向函数传递数组

如果想向函数传递数组实参,就需要在函数声明时,声明形参为数组类型。

  1. 形参设定数组大小:
void myFunction(param[10] int)
  1. 形参未设定数组大小:
void myFunction(param[] int)

同样的,向函数传递数组也有两种方式:

  1. 值传递:直接传递数组变量名。
  2. 引用传递:传递数据的指针。

示例:

package mainimport "fmt"func change(arr[5] int) {arr[0] = 1for i :=0; i < 5; i++ {fmt.Println(arr[i])}fmt.Println("--------")
}func main() {var balance = [5]int {1000, 2, 3, 17, 50}change(balance)for i :=0; i < 5; i++ {fmt.Println(balance[i])}
}

结果:

1
2
3
17
50
--------
1000
2
3
17
50

指针数组

指针数组,即存储指针的数组,跟 C 语言中的指针数组类似。

声明一个整型指针数组:

var ptr[MAX] *int;

示例:

package mainimport "fmt"const MAX int = 3func main() {var i inta := [MAX]int {10, 100, 200}var ptr[MAX] *int;for  i = 0; i < MAX; i++ {ptr[i] = &a[i]    /* 将整数的地址赋值给指针数组 */}for  i = 0; i < MAX; i++ {fmt.Printf("a[%d] = %d\n", i, *ptr[i])}
}

Go 语言编程 — 高级数据类型 — 数组相关推荐

  1. C 语言编程 — 高级数据类型 — 数组

    目录 文章目录 目录 前文列表 数组 声明数组 初始化数据 访问数组元素 二维数组 指向数组的指针 将数组指针作为实参传入函数 从函数返回一个数组指针 指针数组 数组名和取数组首地址的区别 前文列表 ...

  2. C 语言编程 — 高级数据类型 — void 类型

    目录 文章目录 目录 前文列表 void 类型 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> <C 语言编程 - 基本数据类型> & ...

  3. C 语言编程 — 高级数据类型 — 共用体

    目录 文章目录 目录 前文列表 共用体 定义共用体 访问共用体成员 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> <C 语言编程 - 基本 ...

  4. C 语言编程 — 高级数据类型 — 结构体与位域

    目录 文章目录 目录 前文列表 结构体 定义结构体 初始化结构体变量 访问结构体成员 结构体的内存分布 将结构体作为实参传入函数 指向结构体变量的指针 位域 定义位域 使用位域结构体的成员 前文列表 ...

  5. C 语言编程 — 高级数据类型 — 枚举

    目录 文章目录 目录 前文列表 声明枚举类型 定义枚举类型的变量 枚举类型变量的枚举值 枚举在 switch 语句中的使用 将整型转换为枚举类型 前文列表 <程序编译流程与 GCC 编译器> ...

  6. C 语言编程 — 高级数据类型 — 字符串

    目录 文章目录 目录 前文列表 字符串 字符串拷贝 字符串比较 strcmp strncmp 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> &l ...

  7. C 语言编程 — 高级数据类型 — 指针

    目录 文章目录 目录 前文列表 指针 声明一个指针变量 使用指针 空指针 悬空指针 野指针 指针的算术运算 指向指针的指针 将指针作为实际参数传入函数 从函数返回指针 一个古老的笑话 前文列表 < ...

  8. Go 语言编程 — 高级数据类型 — 结构体

    目录 文章目录 目录 结构体 访问结构体成员 向函数传递结构体 结构体指针 结构体标签(Struct Tag) 结构体 Golang 中,结构体是由一系列具有相同类型或不同类型的数据构成的数据集合.与 ...

  9. Go 语言编程 — 高级数据类型 — Interface、多态、Duck Typing 与泛式编程

    目录 文章目录 目录 Golang 的接口 Interface 实例存储的是实现者的值 如何判断某个 Interface 实例的实际类型 Empty Interface Interface 与多态 I ...

最新文章

  1. warning: implicit declaration of function ‘sleep’(添加头文件: #include <unistd.h>)
  2. 用XGBoost调XGBoost?我调我自己?
  3. Ajax 实现无刷新分页
  4. CodeForces - 786C——二分+模拟?
  5. 关于MySql5“data too long for column”问题的探解
  6. 重温Android——调节屏幕亮度
  7. 初识AngularJS 之 HelloWorld和数据绑定
  8. [Java] Maven 建立 Spring MVC 工程
  9. 目标规划第四章计算机求解,单纯形算法与目标规划地应用研究.doc
  10. matlab男女声识别,matlab男女声音识别
  11. 一、Python数据挖掘(环境篇——Anaconda与Jupyter Notebook)
  12. 4.4.4系统不用ROOT激活xposed框架流程
  13. 音乐播放器 - iOS开发
  14. ASML公司Q3季度营收27.9亿欧元
  15. 海湾gst5000主机消防广播_海湾GST5000消防主机常见问题及解决!
  16. 【新手入门硬件】分压电路中阻抗匹配问题
  17. python获取中文字体点阵坐标_Python实现点阵字体读取与转换
  18. 听说C语言很难?怎么不来看看我这篇(二)变量
  19. 任正非:总有一天我们会反攻进入美国
  20. 第三章、C#简单界面在线聊天室C#一对多聊天(使用TCP转发实现的在线聊天室,文章末尾附免费项目资源)

热门文章

  1. iOS Simulator功能介绍关于Xamarin IOS开发
  2. php制作明信片,用PS如何制作明信片?PS制作明信片图文介绍
  3. python绘制月亮_用python画月亮的代码是什么?
  4. 简述python程序结构_python架构的概念讲解
  5. eva每一集片尾曲是谁唱的_【跪求】EVA 18集片尾曲的歌手名,考验大家的听力~...
  6. 人类血液中首次发现微塑料颗粒,饮料瓶塑料袋化妆品都是来源
  7. 用命令行管理你的GitHub项目,不必再开网页,官方CLI工具1.0版今日上线
  8. 谷歌量子计算突破登Science封面!首次对化学反应进行量子模拟
  9. 千米感知误差低于5%,嬴彻发布全球领先的超长距精准3D感知技术
  10. LeCun自曝使用C语言23年之久,2年前才上手Python,还曾短暂尝试Lua