数组
数组的声明
var name [SIZE] type
var list [10] int
注意:
- 数组长度必须是一个常量值
- 数组长度是数组类型的一部分,也就是说下面a,b两个数组是不同类型的
var a [10] int
var b [6] int
//不能这样做,a、b是不同类型的数组
a = b
数组初始化
方式一 指定数组长度初始化
var list1 = [5] int {1,2,3,4,5}
方式二 推断长度初始化
var list1 = [...] int {1,2,3,4,5}
//或者
list1 := [...] int {1,2,3,4,5}
多维数组的声明与初始化
方式一
var list = [2][2] int {
{1,2},
{1,2},
}
方式二
var list = [...][2] int {
{1,2},
{1,2},
}
注意
- 多维数组只有第一层可以使用
...来让编译器推导数组长度。
数组的访问
与其他语言一样,数组可以通过下标来访问,例如array[index]
数组的遍历
在go语言中,数组有两种遍历方式,具体请看下面的demo
package main
import "fmt"
/**遍历数组
@author 赖柄沣 bingfengdev@aliyun.com
@date 2020-10-01 10:57:25
@version 1.0
*/
func main() {
var list = [...] int{1,2,2,4,6}
// 遍历方式一
for i:=0; i< len(list); i++{
fmt.Print(list[i])
}
fmt.Println()
// 遍历方式二
for index := range list {
fmt.Print(list[index])
}
}
输出
12246
12246
数组是值类型
package main
import "fmt"
/**数组是值类型证明
@author 赖柄沣 bingfengdev@aliyun.com
@date 2020-10-01 10:57:25
@version 1.0
*/
func main() {
var list = [...] int{1,2,2,4,6}
var list2 = list
/**
改变list2的值,如果数组是引用类型,那么list2和list指向同一个地址
如果list2发生改变,则list也会发生改变
否则,数组是值类型
赋值语句会将数组值拷贝一份给副本,则改变副本的值对原数组不会产生影响
*/
for index := range list2{
list2[index] = 1
}
fmt.Print("原数组",list)
fmt.Println()
fmt.Print("副本",list2)
}
输出
原数组[1 2 2 4 6]
副本[1 1 1 1 1]
注意:
- 数组支持 “==“、”!=” 操作符,因为内存总是被初始化过的。
[n]*T表示指针数组,*[n]T表示数组指针 。
写在最后
下一篇文章将学习切片(slice)的内容。