Go基础 Array

Go Array 数组


type Array struct {
        Elem  *Type // 元素类型
        Bound int64 // 元素数量
}
定义方式

Go数组长度固定

var <数组名称> [<数组长度>]<元素类型>
var arr [5]int                            //一维数组,自动赋值0
arr1 := [5]int{1,2,3,4,5}                 //指定元素初始化数组
arr2 := [...]int{2,4,6}                   //省略号初始化数组,让编译器计算长度
arr :=[4]string{0:"1",1:"2",2:"3",3:"4"}  //索引化初始数组
var grid [4][5]int                        //二维数组
arr3 := [5]int{3:1}                       //Go可以直接对数组的某一位置赋值
数组遍历
for i:=0;i<len(arr);i++ {
    fmt.Println(arr[i])
}
for i := range arr {
    fmt.Println(arr[i])
}
for _,v := range arr {
    fmt.Println(v)
}
数组是值类型

· [10]int和[5]int是两种类型

Go中长度也是数组类型的一部分

func main() {
    a := [3]int{5, 78, 8}
    var b [5]int
    b = a // a不能赋值给b因为b的类型和a不同,编译器会报 cannot use a (type [3]int) as type [5]int in assignment。
}

· 调用函数func(arr [5]int) 会**拷贝**数组

Go语言特殊的一点,数组位值类型,其他语言为了节省内存都是引用类型。在Go中引用类型为切片slice。

// 函数传参为拷贝数组
func printArray(arr [5]int) {
	arr[0] = 100 //由于是值类型,虽然在这边会改动,但是在main函数,arr[0]并没有修改
	for i, v := range arr {
		fmt.Println(i, v)
	}
}

// 传入指针,就会共享同一块内存,即会修改值
func printPointArray(arr *[5]int) {
	arr[0] = 100 //由于是值类型,虽然在这边会改动,但是在main函数,arr[0]并没有修改
	for i, v := range arr {
		fmt.Println(i, v)
	}
}

func main() {
	var arr [5]int                //一维数组
	arr1 := [5]int{1, 2, 3, 4, 5} //初始化数组
	arr2 := [...]int{2, 4, 6}     //让编译器计算长度
	var grid [4][5]int            //二维数组

	fmt.Println(arr, arr1, arr2)
	fmt.Println(grid)

	printArray(arr)
	printArray(arr1)

	fmt.Println(arr, arr1)

	printPointArray(&arr)
	printPointArray(&arr1)

	fmt.Println(arr, arr1)
}
#output
[0 0 0 0 0] [1 2 3 4 5] [2 4 6]
[[0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0]]
0 100
1 0
2 0
3 0
4 0
0 100
1 2
2 3
3 4
4 5
[0 0 0 0 0] [1 2 3 4 5]
0 100
1 0
2 0
3 0
4 0
0 100
1 2
2 3
3 4
4 5
[100 0 0 0 0] [100 2 3 4 5]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值