go语言开发基础19 - 之go语言里的数组类型

一、说明

  • 数组是同一种类型的固定长度的序列
  • 数组定义:var a[5]int     (定义int类型长度为5的序列,数组定义后长度就不可变)
  • 长度是数组的一部分,因此 var a[5]int 和 var a[10]int 是不同的类型
  • 数组可以通过下标来进行访问,下标是从0开始,最后一个元素下标是:len-1
  • 越界访问,如果下标在数组合法范围之外则会触发越界访问,会panic
  • 数组是值类型,因此改变副本的值不会改变本身的值

 

二、数组定义与初始化方法

2.1、数组定义

var a0 [10]int      // 定义一个长度为10的int类型数组
var a1 [5]string    // 定义一个长度为5的string类型数组
var a2 [2][3]int        // 定义多维数组:表示该数组有2行3列

  

2.2、数组初始化

var arg [5]int = [5]int{1,2,3,4}       // 定义数组时直接初始化,如果初始化的值少时默认以0占位,结果为:[1,2,3,4,0]
var arg1 = [5]int{1,2,3,4,5}       // 推导,不写类型时默认会根据值得类型推导,结果为:[1,2,3,4,5]
var arg2 = [...]int{1,2,3,4,5}       // 可变长度:根据后面值得长度(如果后面值有五个,数组长度就是五个,六个就是六个),结果为:[1,2,3,4,5]
var str = [5]string{3:"hello world", 4:"tom"}    // 指定下标初始化,下标为3得值为:"hello world",下标为4得值为:"tom",没指定下标得就是空值
var age [2][3]int = [...][3]int{{1,2,3},{4,5,6}}     //  多维数组初始化:每行用一个大括号表示,每个大括号里三列

  

三、数组代码示例

3.1、数组定义与循环数组

func numGroup1() {
	var a [10]int      // 定义数组
	a[0] = 100        // 数组赋值操作
	a[9] = 200
	fmt.Println(a)      // 结果为:[100 0 0 0 0 0 0 0 0 200]

	// 数组的两种便利方法:
	fmt.Println("循环数组,方法一")
	for i := 0; i < len(a); i++ {
		fmt.Printf("index:%d,value:%d\n", i, a[i])
	}
	fmt.Println("循环数组,方法二")
	for k, r := range a {
		fmt.Printf("index:%d,value:%d\n", k, r)
	}
}

  

3.2、数组是值类型,因此改变副本的值不会改变原数组的值

func numGroup2() {
	var a [10]int
	b := a
	b[0] = 300
	fmt.Println("a :", a) // 结果为:a : [0 0 0 0 0 0 0 0 0 0]
	fmt.Println("b :", b) // 结果为:b : [300 0 0 0 0 0 0 0 0 0]
}

  

3.3、函数内部修改的值只会作用在函数内部(函数内部如需修改外部数组的值需要接收指针类型,传地址)

func numGroup3(arr *[5]int) {
	(*arr)[0] = 1000
}
func main() {
	var a[5]int
	numGroup3(&a)
	fmt.Println(a)        // 结果为:[1000 0 0 0 0]
}

  

3.4、多维数组定义与循环

func numGroup4() {
	var a1 [2][5]int = [...][5]int{{1, 2, 3, 4, 5}, {6, 7, 8, 9, 0}}    // 定义一个两行五列的数组并赋值,赋值时一个大括号里代表一行,大括号里的每个元素是一列
	for row, v := range a1 {      // 行的循环
		for col, v1 := range v {     // 列的循环
			fmt.Printf("(行:%d,列:%d)=值:%d,", row, col, v1)      // 打印结果
		}
		fmt.Println()
	}
}

// 执行结果为:
(行:0,列:0)=值:1、(行:0,列:1)=值:2、(行:0,列:2)=值:3、(行:0,列:3)=值:4、(行:0,列:4)=值:5、
(行:1,列:0)=值:6、(行:1,列:1)=值:7、(行:1,列:2)=值:8、(行:1,列:3)=值:9、(行:1,列:4)=值:0、

  

3.5、使用数组实现斐波那契序列

func fab(n int) {
	var a []int64
	a = make([]int64, n)
	a[0] = 1
	a[1] = 1
	for i := 2; i < len(a); i++ {
		a[i] = a[i-1] + a[i-2]
	}
	for _, v := range a {
		fmt.Println(v)
	}

}
func main() {
    fab(10)
}

// 执行结果为:
1
1
2
3
5
8
13
21
34
55

 

 

 

 

posted @ 2020-06-06 11:13  欧-阳  阅读(507)  评论(0)    收藏  举报