Go 语言编程 — 高级数据类型 — 数组
目录
文章目录
- 目录
- 数组
- 定义数组
- 数组与切片的区别
- 访问数组元素
- 多维数组
- 初始化二维数组
- 访问二维数组
- 向函数传递数组
- 指针数组
数组
数组是具有相同数据类型的一组已编号且长度固定的数据项序列,可以是任意的原始数据类型也可以是自定义的数据类型。数组元素可以通过索引(位置)来读取(或者修改),索引从 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] )}}
}
向函数传递数组
如果想向函数传递数组实参,就需要在函数声明时,声明形参为数组类型。
- 形参设定数组大小:
void myFunction(param[10] int)
- 形参未设定数组大小:
void myFunction(param[] int)
同样的,向函数传递数组也有两种方式:
- 值传递:直接传递数组变量名。
- 引用传递:传递数据的指针。
示例:
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 语言编程 — 高级数据类型 — 数组相关推荐
- C 语言编程 — 高级数据类型 — 数组
目录 文章目录 目录 前文列表 数组 声明数组 初始化数据 访问数组元素 二维数组 指向数组的指针 将数组指针作为实参传入函数 从函数返回一个数组指针 指针数组 数组名和取数组首地址的区别 前文列表 ...
- C 语言编程 — 高级数据类型 — void 类型
目录 文章目录 目录 前文列表 void 类型 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> <C 语言编程 - 基本数据类型> & ...
- C 语言编程 — 高级数据类型 — 共用体
目录 文章目录 目录 前文列表 共用体 定义共用体 访问共用体成员 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> <C 语言编程 - 基本 ...
- C 语言编程 — 高级数据类型 — 结构体与位域
目录 文章目录 目录 前文列表 结构体 定义结构体 初始化结构体变量 访问结构体成员 结构体的内存分布 将结构体作为实参传入函数 指向结构体变量的指针 位域 定义位域 使用位域结构体的成员 前文列表 ...
- C 语言编程 — 高级数据类型 — 枚举
目录 文章目录 目录 前文列表 声明枚举类型 定义枚举类型的变量 枚举类型变量的枚举值 枚举在 switch 语句中的使用 将整型转换为枚举类型 前文列表 <程序编译流程与 GCC 编译器> ...
- C 语言编程 — 高级数据类型 — 字符串
目录 文章目录 目录 前文列表 字符串 字符串拷贝 字符串比较 strcmp strncmp 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> &l ...
- C 语言编程 — 高级数据类型 — 指针
目录 文章目录 目录 前文列表 指针 声明一个指针变量 使用指针 空指针 悬空指针 野指针 指针的算术运算 指向指针的指针 将指针作为实际参数传入函数 从函数返回指针 一个古老的笑话 前文列表 < ...
- Go 语言编程 — 高级数据类型 — 结构体
目录 文章目录 目录 结构体 访问结构体成员 向函数传递结构体 结构体指针 结构体标签(Struct Tag) 结构体 Golang 中,结构体是由一系列具有相同类型或不同类型的数据构成的数据集合.与 ...
- Go 语言编程 — 高级数据类型 — Interface、多态、Duck Typing 与泛式编程
目录 文章目录 目录 Golang 的接口 Interface 实例存储的是实现者的值 如何判断某个 Interface 实例的实际类型 Empty Interface Interface 与多态 I ...
最新文章
- warning: implicit declaration of function ‘sleep’(添加头文件: #include <unistd.h>)
- 用XGBoost调XGBoost?我调我自己?
- Ajax 实现无刷新分页
- CodeForces - 786C——二分+模拟?
- 关于MySql5“data too long for column”问题的探解
- 重温Android——调节屏幕亮度
- 初识AngularJS 之 HelloWorld和数据绑定
- [Java] Maven 建立 Spring MVC 工程
- 目标规划第四章计算机求解,单纯形算法与目标规划地应用研究.doc
- matlab男女声识别,matlab男女声音识别
- 一、Python数据挖掘(环境篇——Anaconda与Jupyter Notebook)
- 4.4.4系统不用ROOT激活xposed框架流程
- 音乐播放器 - iOS开发
- ASML公司Q3季度营收27.9亿欧元
- 海湾gst5000主机消防广播_海湾GST5000消防主机常见问题及解决!
- 【新手入门硬件】分压电路中阻抗匹配问题
- python获取中文字体点阵坐标_Python实现点阵字体读取与转换
- 听说C语言很难?怎么不来看看我这篇(二)变量
- 任正非:总有一天我们会反攻进入美国
- 第三章、C#简单界面在线聊天室C#一对多聊天(使用TCP转发实现的在线聊天室,文章末尾附免费项目资源)
热门文章
- iOS Simulator功能介绍关于Xamarin IOS开发
- php制作明信片,用PS如何制作明信片?PS制作明信片图文介绍
- python绘制月亮_用python画月亮的代码是什么?
- 简述python程序结构_python架构的概念讲解
- eva每一集片尾曲是谁唱的_【跪求】EVA 18集片尾曲的歌手名,考验大家的听力~...
- 人类血液中首次发现微塑料颗粒,饮料瓶塑料袋化妆品都是来源
- 用命令行管理你的GitHub项目,不必再开网页,官方CLI工具1.0版今日上线
- 谷歌量子计算突破登Science封面!首次对化学反应进行量子模拟
- 千米感知误差低于5%,嬴彻发布全球领先的超长距精准3D感知技术
- LeCun自曝使用C语言23年之久,2年前才上手Python,还曾短暂尝试Lua