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}

注意,初始化数组中 {} 中的元素个数不能大于 [] 中的数字。

也可以省略指定元素的个数,使用 [...] 来表示,编译器会根据元素的个数来设置数组的大小:

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] )
       }
    }
}

向函数传递数组

如果想向函数传递数组实参,就需要在函数声明时,声明形参为数组类型。

  1. 形参设定数组大小:
void myFunction(param [10] int)
  1. 形参未设定数组大小:
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])
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章