数组和切片

一.数组


Go语言的数组也是一个元素类型相同的定长的序列

1.创建
A.创建方式1:

var iarray1 [5]int // 声明数组,自动赋值所有成员为0
iarray1 = [5]int32{1, 2, 3, 4, 5}
var iarray2 [5]int = [5]int32{1, 2, 3, 4, 5} //声明并初始化

  

B.创建方式2:

iarray3 := [5]int{1, 2, 3, 4, 5}

C.创建方式3:

iarray5 := [...]int{11, 12, 13, 14, 15}

  

2.数组的长度和容量
len(array)和cap(array)求值,两者一致.

 

3.遍历数组

for k, v := range iarray {
		fmt.Println(k, v)
}

  

二.切片

切片是长度可变、容量固定的相同的元素序列

1.创建

A.方式1:
make ( []Type ,length, capacity )

B.方式2:
make ( []Type, length)

C.方式3:
[]Type{}

D.方式4:
[]Type{value1 , value2 , ... , valueN }

  

除了make外,创建切片和数组唯一的区别是,Type 前的“ [] ”中是否有数字,为空,则代表切片,否则则代表数组.

 

2.一个切片是一个隐藏数组的引用

arr1 := []int{1, 3, 3, 3, 3}
arr2 := arr1
arr2[0] = 1000

fmt.Println(arr1, arr2)

  

// arr2更改值后,arr1也被更改了;数组则不会有此特性

3.遍历/修改切片

func main() {
	arr1 := []int{1, 3, 3, 3, 3}
	arr1[0] = 1000
	for k, v := range arr1 {
		fmt.Println(k, v)
	}
}

  

4.追加/复制切片

append:

func main() {
	arr1 := []int{1, 3, 3, 3, 3}
	arr2 := append(arr1, 15, 20)
	for k, v := range arr2 {
		fmt.Println(k, v)
	}
}

  

copy:

func main() {
	arr1 := []int{1, 3, 3, 3, 3}
	arr2 := make([]int, 2)
	copy(arr2, arr1) // 将arr1复制到arr2中,两个数组切片不一样大,就会按其中较小的那个数组切片的元素个数进行复制
	arr2[0] = 500
	fmt.Println(arr1, arr2)
}

  

三.数组和切片作为函数参数

1.数组作为参数

func Handle(arr [2]int) {
	arr[0] = 100
}

func main() {
	arr1 := [2]int{1, 52}
	Handle(arr1)
	fmt.Println(arr1)
}

  

// 参数传递是对数组的复制,Handle改变的是arr1的一个副本,不会对arr1有影响

 

2.切片做参数

func Handle(arr []int) {
	arr[0] = 100
}

func main() {
	arr1 := []int{1, 52}
	Handle(arr1)
	fmt.Println(arr1)
}

  

切片是一个引用,Handle改变了arr1的元素.

Go语言的函数调用参数全部是传值的, 包括 slice/map/chan/inerface 在内所有类型.slice/map/chan/interface传递了引用.

 

  

 

转载于:https://www.cnblogs.com/itfenqing/p/7638785.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值