一.数组
1)定义:
var a1 [3]int
var a2 [...]int{1,2,3}
2)初始化
a1 := [...]int{1,2,3}
a2 := [5]int{1,2,3}
二.切片
1)定义:
a1 := [...]int{1,2,3}
a2 := [5]int{1,2,3}
2)初始化:
b1 := make([]int, 3,5)
三.区别
数组是固定大小; 切片可以扩容
四.举例
<!-------------------- 数组 ----------------->
var a1 [5]int
<!--自动推断数组大小-->
a2 := [...]int{1, 2, 3}
<!--打印-->
fmt.Println(a1, a2)
<!--按索引赋值-->
a3 := [...]int{2: 2, 4: 4}
fmt.Println(a3)
<!--按索引赋值-->
a4 := [5]int{2: 2, 4: 4}
fmt.Println(a4)
<!-------------------- 切片 ----------------->
<!--定义切片-->
var b1 []int
fmt.Println(b1)
<!--初始化-->
b1 = make([]int, 5, 5+3)
fmt.Println(b1)
fmt.Printf("b1=%v,len=%d,cap=%d\n", b1, len(b1), cap(b1))
<!--初始化-->
b2 := make([]int, 3, 5)
fmt.Printf("b2=%v,len=%d,len=%d\n", b2, len(b2), cap(b2))
<!--------------------打印----------------->
[0 0 0 0 0] [1 2 3]
[0 0 2 0 4]
[0 0 2 0 4]
[]
[0 0 0 0 0]
b1=[0 0 0 0 0],len=5,cap=8
b2=[0 0 0],len=3,len=5
五.指针数组
array:=[5]*int{0:new(int),1:new(int)}
*array[0]=10
*array[1]=20
表达式new(T)将创建一个T类型的匿名变量,所做的是为T类型的新值分配并清零一块内存空间,然后将这块内存空间的地址作为结果返回,而这个结果就是指向这个新的T类型值的指针值,返回的指针类型为***T
当复制数组指针,只会复制指针的值,不会复制指针指向的值
三.多维数组
声明:
var array [4][2]int
array1:=[4][2]int{{1,2},{3,5},{7,9},{10,19}}
//声明并初始化外层数组中索引为1的
array1:=[4][2]int{1:{1,2},3:{3,5}}
网友评论