一、数组的定义和声明
在Go语言中,数组长度在定义后就不可更改,在声明时长度可以为一个常量或者一个常量表达式。数组的长度是该数组类型的一个内置常量,可以用Go语言的内置函数len()来获取。
1.var array [4]int //第一种,定义后采用默认值方式,全0
2.var array […]int={1,2,3,4,5} //第二种,不声明长度,但是需显式初始化
3.var array [5]*int //指针数组,指针数组是数组里面全都是指针类型
4.var array *[5]int // 数组指针 ,数组指针是指向数组地址的指针
二、数组访问
数组的索引从 0 开始到 length – 1 结束
1.常规访问,for+索引方式,即for i:=0;i<len(array);i++
2.for-range方式
三、数组长度和元素数量
使用len 函数,可以得到数组的长度, cap函数可以得到元素数量
四、golang的数组是值类型
go语言中的数组是值类型而不是引用类型。这意味着当数组赋值给一个新的变量时,该变量会得到一个原始数组的一个副本。如果对新变量进行更改,则不会影响原始数组。
func main() {
a := […]int{1,2,3,4,5}
b := a // a copy of a is assigned to b
fmt.Printf(“[%p] [%p]\n”,&a,&b) // a和b的地址不一样
b[0] = 10
fmt.Println(“a is “, a) //a is [1 2 3 4 5]
fmt.Println(“b is “, b) //b is [10 2 3 4 5]
}
三、数组内存占用大小和数组地址查看
1.数据内存占用大小:unsafe.Sizeof(array)
2.数组地址查看,fmt.Printf+%p输出即可
四、数组作为函数参数传递注意事项
1.如果将数组作为函数的参数类型,采用按值传递,即在函数调用时该参数将发生数据复制。因此,在函数体中无法修改传入的数组的内容,因为函数内操作的只是所传入数组的一个副本。
package main
import “fmt”
func update(arr [4]int){
arr[0] = 10
fmt.Printf(“in-update:%v\n”,arr) //10 2 3 4
}
func main() {
array := […]int{1,2,3,4}
fmt.Printf(“before:%v\n”,array) // 1 2 3 4
update(array)
fmt.Printf(“after:%v\n”,array) // 1 2 3 4
}