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

内存示意图如下
image
内存图说明:

  1. 数组的地址可以通过数组名来获取,如:&a
  2. 数组的第一个元素的地址就是数组的首地址
  3. 数组各个元素的地址大小间隔,是依据数组的类型来决定的。比如:int64间隔就是8个字节,int32间隔就是4个字节

四、数组的使用

  1. 五种初始化数组的方式
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]
  1. 访问数组元素:数组名[下标]
    访问a数组的第三个元素:a[2]

五、注意细节

1.数组是个相同数据类型的组合,一个数组一旦声明/定义了,其长度是固定的,不能动态变化,数组的长度也是数组类型的一部分
2.var arr []int,这是切片,和数组是两个数据类型,不是同一概念。
3.数组的元素可以是任何数据类型,包括值类型和引用类型,但不能混用
4.数组创建后,如果没有赋值,有默认值

数值类型数组,默认值为0
bool数组,默认值为false
字符串数组,默认值为""

5.数组的下标从0开始。
6.数组下标必须在指定范围内,否则报pannic,数组越界
7.GO数组属于值类型,在默认情况下是值传递,因此会进行值拷贝,数组间不会互相影响
8.如果在其他函数中,去修改原来的数组,可以使用引用传递(指针方式)
9.长度是数组类型的一部分,在传递函数参数时,需要考虑数组的长度。

posted @ 2021-05-16 11:26  若雨蚂蚱  阅读(123)  评论(0编辑  收藏  举报