数组 Array

数组:是同一种数据类型,组成的固定长度的序列。

定义:var a[len] int,比如:var a[5] int,数组长度必须是常量,且是类型的组成部分。一旦定义,长度不能改变。

长度是数组类型的一部分,因此 var a[5] int 和 var a[6] int 是不同的类型

数组可以通过下标进行访问,从0开始,最后一位下标 len-1

访问越界,如果下标在数组合法范围之外,则触发访问越界,回panic

数组是值类型,赋值和传参会复制整个数组,而不是指针。因此改变副本的值,不会改变本身的值。

支持 == 和 != 操作符,因为内存总是被初始化过的

指针数组 [n]*T,数组指针 *[n]T

 

 

一维数组

package main

import (
	"fmt"
)

// 全局变量,必须用var声明,局部变量,可以var,可以:=

// 全局
var arr0 [5]int = [5]int{1,2,3}				// [1 2 3 0 0]
var arr1 = [5]int{1,2,3,4,5}				// [1 2 3 4 5]
var arr2 = [...]int{1,2,3,4,5,6,7,8}		// [1 2 3 4 5 6 7 8]
var str = [5]string{3:"hello",4:"hi"}		// [   hello hi]
var arr3 = [...]int{5,1:2,3}				// [5 2 3]

// 局部
func main() {

	var a = [3]int{1,2}						// [1 2 0]				未初始化的元素值是0
	b := [...]int{1,2,3,4,5,6,7}			// [1 2 3 4 5 6 7]		通过初始化值确定数组的长度
	c := [5]int{2:100,4:200}				// [0 0 100 0 200]		按照索引,初始化元素
	d := [...]struct{						// [{user1 10} {user2 20}]		
		name string
		age uint8
	}{
		{"user1",10},			// 可省略元素类型
		{"user2",20},			// 最后一行,也要添加 ,
	}

}

 

 

多维数组

package main

import (
	"fmt"
)

// 全局变量,必须用var声明,局部变量,可以var,可以:=

// 全局
var arr0 [2][3]int									//	[[0 0 0] [0 0 0]]
var arr1 [2][3]int = [...][3]int{{1,1,1},{2,2,2}}	//	[[1 1 1] [2 2 2]]	第二维度,不能用...

// 局部
func main() {

	var a = [2][3]int{{1,2,3},{4,5,6}}					// [[1 2 3] [4 5 6]]
	b := [...][2]int{{1,1},{2,2},{3,3}}					// [[1 1] [2 2] [3 3]]

}

 

 

内置函数 len和cap,都能返回 数组的长度

package main

import "fmt"

func main() {

	var a = [2][3]int{{1,2,3},{4,5,6}}					
	fmt.Println(len(a))
	fmt.Println(cap(a))

}

  

 

多维数组遍历

package main

import "fmt"

func main() {

	var f [2][3]int = [...][3]int{{1,2,3},{7,8,9}}

	for k1,v1 := range f {
		for k2,v2 := range v1 {
			fmt.Printf("(%d,%d)=%d",k1,k2,v2)
		}
		fmt.Println()
	}

}

// (0,0)=1(0,1)=2(0,2)=3
// (1,0)=7(1,1)=8(1,2)=9

  

 

数组拷贝和传参

package main

import "fmt"

func printArr(arr *[5]int) {
    arr[0] = 10
    for i, v := range arr {
        fmt.Println(i, v)
    }
}

func main() {
    var arr1 [5]int
    printArr(&arr1)
    fmt.Println(arr1)
    arr2 := [...]int{2, 4, 6, 8, 10}
    printArr(&arr2)
    fmt.Println(arr2)
}


// 0 10
// 1 0
// 2 0
// 3 0
// 4 0
// [10 0 0 0 0]		&arr1,指针,arr1被更改

// 0 10
// 1 4
// 2 6
// 3 8
// 4 10
// [10 4 6 8 10]

  

 

posted on 2021-04-14 10:01  二十四岁半  阅读(42)  评论(0编辑  收藏  举报

导航