目錄
數組
數組是具有相同數據類型的一組已編號且長度固定的數據項序列,可以是任意的原始數據類型也可以是自定義的數據類型。數組元素可以通過索引(位置)來讀取(或者修改),索引從 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])
}
}