此处数组只讲Go语言中和C语言不一样的地方
格式不同:
Go语言定义数组的格式:var ages [3]int
定义的同时初始化
格式 var 数组名称 数组类型 = 数组类型{值}
var ages [3]int = [3]int{1,3,5}
注意点:
1.在定义的同时初始化必须在大括号前写上数据类型,并且数据类型必须相同(数组长度和数据类型)
2.可以和C语言一样部分初始化,但是C语言部分初始化没有被赋值的地方保存了垃圾数据,Go语言中没有被赋值的地方默认为0\
3.数组中数组的名称不能代表数组的地址
第二种方式(省略数组长度)
ages := [...]int{1,3,5}
在这里用...表示数组长度,编译器根据赋值的元素个数自动计算数组的元素个数
先定义后初始化
var ages [3]int
ages = [3]int{1,3,5}
在这里,Go语言可以一次性给数组赋值,当然也可以逐个赋值
数组注意点
Go语言中数组是值类型,数组之间的赋值是值拷贝,而不是地址的拷贝
ages := [3]int{1,3,5}
change(ages)
fmt.println(ages)//1,3,5
func change(num [3]int) {
num[1] = 666
}
2.由于数组是值类型,所以两个数组间可以用" == " " != "进行比较,但是进行值比较的数组必须类型长度完全相同,完全相同!!!
数组的遍历
方法一: 传统的for循环
方法二: for index,value := range ages{
fmt.println(index,value)
}
二维数组
定义二维数组的格式
var 数组名称 [行数][列数]数据类型
var 数组名称 [一维数组的个数][每个一维数组的元素个数]数据类型
注意点:
二维数组也可以省略元素个数, 但是只能省略行数, 不能省略列数
切片(重点)
数组的长度一旦固定,就不能改变,Go语言为了解决这一问题,产生了切片,切片就是可变的数组
切片的底层是结构体
Go语言源码中如此展示