package main
import "fmt"
/*
* 一维数组:var variable_name [SIZE] variable_type
* 一维数组初始化:
* 固定长度:var variable_name = [SIZE] variable_type {value1, value2, ..., valueSIZE}
* 根据内容:var variable_name = [...] variable_type {value1, value2, ...}
*
* 多维数组:var variable_name [SIZE1][SIZE2]...[SIZEN] variable_type
* 多维数组初始化:
* 固定长度:var variable_name = [SIZE1][SIZE2]...[SIZEN] variable_type {{raw1_value1, raw1_value2, ...}, {raw2_value1, raw2_value2, ...}, {...}}
* 根据内容:var variable_name = [][]...[] variable_type {{raw1_value1, raw1_value2, ...}, {raw2_value1, raw2_value2, ...}, {...}}
*
*/
// 声明长度与内容相等的数组
// 初始化数组中 {} 中的元素个数不能大于 [] 中的数字。
// 如果忽略 [] 中的数字不设置数组大小,Go 语言会根据元素的个数来设置数组的大小:
var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
/*
* 函数调用传递数组参数
* 方式1:不指定数组长度,由外部传入
*/
func getAverage(arr []int, size int) float32 {
var i, sum int
var avg float32
for i = 0; i < size; i++ { // go 的语法不允许 ++i
sum += arr[i]
}
avg = (float32)(sum / size)
return avg
}
/*
* 函数调用传递数组参数
* 方式2:指定数组长度
* 数组声明指定数组长度时,要求传入数组在声明时也必须有相同的长度,
* 当声明指定长度时,则可以省略数组长度的参数,只保留一个数组即可。
*/
func getAverageSpecialLen(arr [4]int) float32 {
var i, sum int
var avg float32
for i = 0; i < len(arr); i++ {
sum += arr[i]
}
// 所有的变量赋值,如果涉及类型转换,必须显示进行类型转换,否则编译失败,提示语法错误。
avg = (float32)(sum / len(arr))
return avg
}
// 获取二维数组的平均值
func getAverageMulti(arr [][]int, rowNum int, colNum int) float32{
var i, j, sum int
var avg float32
for i = 0; i < rowNum; i++ {
for j = 0; j < colNum; j++ {
// 多维数组的操作方式,通过下标操作 variable_name [一维索引][二维索引]...[N维索引]
sum += arr[i][j]
}
}
avg = (float32)(sum / rowNum / colNum)
return avg
}
// 获取二维数组的平均值,通过引用传递数组获取每行平均值
// 注意引用传递数组的表达方式:variable_name *[] variable_type
// 引用传递数组,必须给定数组长度,否则无法使用 avgs[index] 的方式赋值
func getAverageMultiRef(arr [3][4]int, avgs *[3] float32){
var i, j, sum int
rowNum := len(arr)
colNum := len(arr[0])
for i = 0; i < rowNum; i++ {
sum = 0
for j = 0; j < colNum; j++ {
sum += arr[i][j]
}
// 声明 avgs 为引用传递,操作引用数组时不需要使用 *avgs[] 的方式来操作,直接使用 avgs[index] 即可。
avgs[i] = (float32)(sum / colNum)
}
}
func main() {
fmt.Println("array")
fmt.Println(balance, len(balance))
var balanceInt = []int {1000, 2, 3, 17, 50}
average := getAverage(balanceInt, len(balanceInt))
fmt.Println("getAverage = ", average)
var balanceIntLen = [4]int {1000, 2, 3, 17}
averageLen := getAverageSpecialLen(balanceIntLen)
fmt.Println("getAverageSpecialLen = ", averageLen)
var balanceMulti = [][]int {{1000, 2, 3, 17}, {1, 3, 5, 7}, {2, 4, 6, 8}}
fmt.Println("raw count=", len(balanceMulti), ", col count=", len(balanceMulti[0]))
fmt.Println("getAverageMulti=", getAverageMulti(balanceMulti, len(balanceMulti), len(balanceMulti[0])))
var balanceMultiRef = [3][4]int {{1000, 2, 3, 17}, {1, 3, 5, 7}, {2, 4, 6, 8}}
var averageMultiRef [3] float32
// 引用传递数组,使用标识符 &
getAverageMultiRef(balanceMultiRef, &averageMultiRef)
for i := 0; i < len(averageMultiRef); i++ {
fmt.Println("line", i, "average=", averageMultiRef[i])
}
}
输出结果
array
[1000 2 3.4 7 50] 5
getAverage = 214
getAverageSpecialLen = 255
raw count= 3 , col count= 4
getAverageMulti= 88
line 0 average= 255
line 1 average= 4
line 2 average= 5