目录
数组
数组是具有相同数据类型的一组已编号且长度固定的数据项序列,可以是任意的原始数据类型也可以是自定义的数据类型。数组元素可以通过索引(位置)来读取(或者修改),索引从 0 开始,第一个元素索引为 0,第二个索引为 1,以此类推。
定义数组
Golang 数组声明需要指定元素类型及元素个数,格式如下:
// 声明
var variable_name [SIZE] variable_type
// 初始化
var balance = [5] float32 {1000.0, 2.0, 3.4, 7.0, 50.0}
注意,初始化数组中 {} 中的元素个数不能大于 [] 中的数字。
也可以省略指定元素的个数,使用 [...]
来表示,编译器会根据元素的个数来设置数组的大小:
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 /* n 是一个长度为 10 的数组 */
var i, j int
/* 为数组 n 初始化元素 */
for i = 0; i < 10; i++ {
n[i] = i + 100 /* 设置元素为 i + 100 */
}
/* 输出每个数组元素的值 */
for j = 0; j < 10; j++ {
fmt.Printf("Element[%d] = %d\n", j, n[j])
}
}
多维数组
多维数组定义格式:
var variable_name [SIZE1][SIZE2]...[SIZEN] variable_type
二维数组是最简单的多维数组,二维数组定义方式如下:
var arrayName [x][y] 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() {
/* 数组 - 5 行 2 列*/
var a = [5][2]int{ {0,0}, {1,2}, {2,4}, {3,6}, {4,8} }
var i, j int
/* 输出数组元素 */
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 main() {
/* 数组长度为 5 */
var balance = [5] int {1000, 2, 3, 17, 50}
var avg float32
/* 数组作为参数传递给函数 */
avg = getAverage(balance, 5);
/* 输出返回的平均值 */
fmt.Printf("平均值为: %f", avg);
}
func getAverage(arr [5] int, size int) float32 {
var i, sum int
var avg float32
for i = 0; i < size; i++ {
sum += arr[i]
}
avg = float32(sum) / float32(size)
return avg;
}
指针数组
示例:声明一个整型指针数组
var ptr [MAX] *int;
示例:
package main
import "fmt"
const MAX int = 3
func main() {
a := [] int {10, 100, 200}
var i int
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])
}
}