数组
Go语言中数组是同一数据类型元素的集合,使用时可以修改数组成员,但是数组大小不可改变。基本语法:
var arr [3]int //定义一个3个元素int类型的数组
数组定义
var 数组变量名 [元素数量]T
比如:var a [5]int,数组长度必须是常量,并且长度是数组类型的一部分,一旦定义长度不能变。[5]int 和[10]int 是不同的类型。
var a [3]int
var b [4]int
a = b // 不可以这样因为a和b是不同类型
package main
import "fmt"
func main(){
/**
1.存放元素的容器
2.必须指定存放元素的类型和容量(长度)
3.数组的长素是数组类型的一部分
**/
var a [3]int
var b [4]int
fmt.Printf("a:%T\n b:%T\n" , a ,b)
}
数组可以通过下标进行访问,下标是从0开始,最后一个下标是len-1,访问越界(下标在合法范围之外),则触发访问越界,会panic。
数组的初始化
数组如果不初始化默认都是零值(布尔值:false,整型和浮点型都是0,字符串:" ")。
方法一
var a [3]bool
a = [3]bool{true,true,true}
方法二
//根据初始值自动推算数组的长度
b := [...]int{1,2,3,4,5,6,7,8,9}
var b = [...]int{1,2,3,4,5,6,7,8,9}
方法三
c := [5]int{1,2} //1,2,0,0,0
//根据索引来初始化
d := [5]int(0:1,4:2) //1,0,0,0,2
数组的遍历
package main
import "fmt"
func main(){
//方法一
a := [...]string{"hello" , "php" , "go"}
for i:=0;i<len(a);i++{
fmt.Println(a[i])
}
//方法二
for k,v:=range a{
fmt.Printf("k=%s , v=%s\n",k , v )
}
}
多维数组
Go语言是支持多维数组的,我们这里以二维数组为例
二维数组的定义
package main
import "fmt"
func main(){
arr := [2][3]string{
{"beijing" , "shanghai" , "guangzhou"},
{"henan" , "hebei" , "heilongjiang"}, //最后一个,必须有
}
fmt.Println(arr)
fmt.Println(arr[1][1])
}
多维数组的遍历
package main
import "fmt"
func main(){
arr := [2][3]string{
{"北京","上海","广州"},
{"河南","河北","山西"},
}
for _ , v := range arr{
for _ , va := range v{
fmt.Println(va)
}
}
}
数组是值类型
数组是值类型复制和传参会复制整个数组。因此会改变副本的值不会改变本身的值。
package main
import "fmt"
func modifyarr(x [3]int){
x[0] = 100
}
func modifyarr2(x [3][2]int){
x[2][0] = 100
}
func main(){
a := [3]int{10,20,30}
modifyarr(a)
fmt.Println(a)
b := [3][2]int{
{1,1},
{1,1},
{1,1},
}
modifyarr2(b)
fmt.Println(b)
}
注意:
1.数组支持"==","!=",因为内存总是被初始化过的。
2.[n]T表示指针数组,[n]T表示数组指针。