go语言中数组与切片的区别

一句话总结:切片是动态数组,注意两者初始化和函数参数的区别

1、初始化:数组需要指定大小,不指定也会根据初始化的自动推算出大小,不可改变 

数组: a := [...]int{1,2,3}   a := [3]int{1,2,3}

切片: a:= []int{1,2,3}  a := make([]int, 5) a := make([]int, 5, 10)

//var a [...]int = [...]int{1, 2, 3} //error
a := [...]int{1, 2, 3}
var a2 [3]int = [3]int{4, 5, 6}


 

切片不需要指定大小

var s []int = []int{1, 2, 3, 4}


 

2、函数传递:

数组需要明确指定大小,切片不需要。数组是值传递,切片是地址传递

package main
 
import "fmt"
 
func changeArray(a [3]int) {
	a[0] = 100
}
 
func changeSlice(s []int) {
	s[0] = 100
}
 
func main() {
	//var a [...]int = [...]int{1, 2, 3} //error
	a := [...]int{1, 2, 3}
	changeArray(a)
	fmt.Println(a[0]) //值传递
 
	var a2 [3]int = [3]int{4, 5, 6}
	a2[2] = 77
 
	var s []int = []int{1, 2, 3, 4}
	fmt.Println(len(s), cap((s)))
	s = append(s, 6, 7, 8)
	fmt.Println(len(s), cap(s))
	changeSlice(s)
	fmt.Println(s[0]) //地址传递
 
}

1
4 4
7 8
100

成功: 进程退出代码 0.




  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值