go语言中数组与切片有哪些区别

寻技术 Go编程 2024年05月12日 53

本文小编为大家详细介绍“go语言中数组与切片有哪些区别”,内容详细,步骤清晰,细节处理妥当,希望这篇“go语言中数组与切片有哪些区别”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

数组与切片的区别:1、切片是指针类型,数组是值类型;2、数组的赋值形式为值传递,切片的赋值形式为引用传递;3、数组的长度是固定的,而切片长度可以任意调整(切片是动态的数组);4、数组的长度是固定的,而切片长度可以任意调整(切片是动态的数组)。

undefined

Go语言中的数组大概相当与C/C++中的数组,固定大小,不能够动态扩展大小,而切片大概相当与C++中的Vector,可以动态扩展大小,当大小超过容量时,重新分配一块内存,然后将数据复制到新的内存区域。

一、数组

Go的切片是在数组之上的抽象数据类型,因此在了解切片之前必须要先理解数组。

1、数组的三种申明方式

  • var identifier [len]type

  • var identifier = [len]type{value1, value2, … , valueN}

  • var identifier = […]type{value1, value2, … , valueN}

相对应的:

  • identifier := [len]type{}

  • identifier := [len]type{value1, value2, … , valueN}

  • identifier := […]type{value1, value2, … , valueN}

例子:

func Connect() {
slice1 := [] int {1,2,3}
fmt.Printf("%v ",slice1);
for k := range slice1 {
fmt.Printf("%v ",&slice1[k]);
}
fmt.Println("");
f1(slice1)
}
func f1(slice []int) {
fmt.Printf("%v ",slice);
for k := range slice {
fmt.Printf("%v ",&slice[k]);
}
}

输出结果:
[1 2 3] 0xc420014140 0xc420014148 0xc420014150
[1 2 3] 0xc420014140 0xc420014148 0xc42001415

从这个例子中可以看出,切片在参数中传递本身就引用。

关闭

用微信“扫一扫”