七叶笔记 » golang编程 » golang基础之数组

golang基础之数组

一、数组的定义和声明

在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

}

相关文章