Golang基础知识-05-数组

数组

import "fmt"

func main() {
	var a = [3]int{1, 2, 3}                   // 一维数组,指定长度
	var b = [...]int{1, 2, 3}                 // 一维数组,未指定长度
	var c = [...]int{1: 1, 2: 2, 3: 3}        // 指定下标
	var d = [3][2]int{{1, 2}, {3, 4}, {5, 6}} // 二维数组
	fmt.Print(a, b, c, d)                     // 输出[1 2 3] [1 2 3] [0 1 2 3] [[1 2] [3 4] [5 6]]
}

注意:Golang中,数组是值类型

// 数组赋值
var a1 = [...]int{1, 2, 3}
var a2 = a1
println(&a1, &a2) // 输出0xc000044738 0xc000044720 内存地址不一致,赋值会复制整个数据,而非指针

// 对比结构体赋值
type s struct {
}
var s1 = s{}
var s2 = s1
println(&s1, &s2) // 输出 0xc000044708 0xc000044708

类型相同的数组可以直接使用==!=进行比较

// case 1
var a1 = [3]int{1, 2, 3}
var a2 = [3]int{1, 2, 4}
println(a1 == a2) // 输出false

// case 2
var a3 = [3]int{1, 2, 3}
var a4 = [2]int{1, 2}
println(a3 == a4) // [3]int与[2]int类型不同,报错:invalid operation: a3 == a4 (mismatched types [3]int and [2]int)

// case 3
var a5 = [...]int{1,2,3}
var a6 = [...]int{1,2,3}
println(a5 == a6) // 输出true

// case 4
var a7 = [...]int{1,2,3}
var a8 = [...]int{1,2}
println(a7 == a8) // 报错:invalid operation: a7 == a8 (mismatched types [3]int and [2]int)

// case 5
var a9 = []int{1,2,3}
var a10 = []int{1,2,3}
println(a9 == a10) // 切片不能这样比较,报错:invalid operation: a9 == a10 (slice can only be compared to nil)

// case 6
var a11 = []int{1,2,3}
var a12 = [...]int{1,2,3}
println(a11 == a12) // 报错:invalid operation: a11 == a12 (mismatched types []int and [3]int)

使用len()cap()函数

len()查看长度,cap()查看容量

// 对于数组,len()和cap()的输出结果是一样的
var a = [...]int{1, 2, 3}
var b = [5]int{1, 2, 3}
println(len(a), cap(a)) // 输出 3 3
println(len(b), cap(b)) // 输出 5 5
发布了8 篇原创文章 · 获赞 0 · 访问量 49

猜你喜欢

转载自blog.csdn.net/Landercy/article/details/104107838