数组是具有相同数据类型的一组已编号且长度固定的数据项序列,可以是任意的原始数据类型也可以是自定义的数据类型。数组元素可以通过索引(位置)来读取(或者修改),索引从 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 main
import "fmt"
func main() {
var balance[5] int
balance = [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 main
import "fmt"
func main() {
var n[10] int
for 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 main
import "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 main
import "fmt"
func change(arr[5] int) {
arr[0] = 1
for 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 main
import "fmt"
const MAX int = 3
func main() {
var i int
a := [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])
}
}