go语言数组
一、基本介绍
数组可以存放多个同一类型数据,数组也是一种数据类型,在Go中,数组是值类型。
二、数组的定义
var 数组名 [数组大小] 数据类型
例子:
var a [3] int
三、数组的内存布局
package main
import (
"fmt"
)
func main() {
var a [3]int
fmt.Printf("a的地址=%p,a[0]的地址=%p,a[1]的地址=%p,a[2]的地址=%p", &a, &a[0], &a[1], &a[2])
}
输出结果
a的地址=0xc0000124e0,a[0]的地址=0xc0000124e0,a[1]的地址=0xc0000124e8,a[2]的地址=0xc0000124f0
内存示意图如下:
内存图说明:
- 数组的地址可以通过数组名来获取,如:&a
- 数组的第一个元素的地址就是数组的首地址
- 数组各个元素的地址大小间隔,是依据数组的类型来决定的。比如:int64间隔就是8个字节,int32间隔就是4个字节
四、数组的使用
- 五种初始化数组的方式
package main
import (
"fmt"
)
func main() {
// 第一种
var a [3]string = [3]string{"1", "2", "3"}
// 第二种
var b = [3]string{"4", "5", "6"}
// 第三种
c := [3]string{"7", "8", "9"}
// 第四种
d := [...]string{"10", "11", "12"}
// 第五种
e := [...]string{1: "13", 2: "14", 3: "15"}
fmt.Printf("a=%v\nb=%v\nc=%v\nd=%v\ne=%v", a, b, c, d, e)
}
输出结果:
a=[1 2 3]
b=[4 5 6]
c=[7 8 9]
d=[10 11 12]
e=[ 13 14 15]
- 访问数组元素:数组名[下标]
访问a数组的第三个元素:a[2]
五、注意细节
1.数组是个相同数据类型的组合,一个数组一旦声明/定义了,其长度是固定的,不能动态变化,数组的长度也是数组类型的一部分
2.var arr []int,这是切片,和数组是两个数据类型,不是同一概念。
3.数组的元素可以是任何数据类型,包括值类型和引用类型,但不能混用
4.数组创建后,如果没有赋值,有默认值
数值类型数组,默认值为0
bool数组,默认值为false
字符串数组,默认值为""
5.数组的下标从0开始。
6.数组下标必须在指定范围内,否则报pannic,数组越界
7.GO数组属于值类型,在默认情况下是值传递,因此会进行值拷贝,数组间不会互相影响
8.如果在其他函数中,去修改原来的数组,可以使用引用传递(指针方式)
9.长度是数组类型的一部分,在传递函数参数时,需要考虑数组的长度。