3 回答
TA贡献1802条经验 获得超5个赞
切片在数组上有很多用途,其他一些张贴者已经提到过。
切片可以通过多种方式进行操作,例如指针。
多个切片可以“指向”相同的基本数组
切片是通过引用传递的,但是由于切片本身是指针,因此可以使用它来更有效地传递“数组”,因为不需要复制整个数组。
但是,与指针不同,切片提供了额外的缓冲区安全性
切片下溢和上溢会触发异常,而不是使您不安全地访问内存的其他区域。
通过切片,您可以将访问权限限制为仅访问阵列的某些区域。这在处理子集时可能非常有用。
切片的长度是在运行时动态确定的,这与数组的大小在编译时是固定的不同。同样,可以在运行时动态调整切片的大小。
TA贡献1829条经验 获得超9个赞
在中go
,数组按值传递;因此,要“通过引用传递”,您需要使用一个切片。不仅如此!引用Go的教程:
数组的大小是其类型的一部分;但是,可以声明一个slice变量,可以将一个指针分配给具有相同元素类型的数组,或者(更常见的是)a [low:high]形式的slice表达式,该子表达式表示由low到索引的子数组。高1。切片看起来很像数组,但没有显式的大小([]与[10]),它们引用基础(通常是匿名)规则数组的一部分。如果多个切片代表同一数组的各个部分,则它们可以共享数据。多个阵列永远无法共享数据。
在Go程序中,切片比常规数组更常见。它们更加灵活,具有参考语义并且高效。他们缺乏的是对常规阵列的存储布局的精确控制。如果要在结构中存储数组的一百个元素,则应使用常规数组。
将数组传递给函数时,几乎总是希望将形式参数声明为切片。调用函数时,获取数组的地址,然后Go将创建(有效地)切片引用并将其传递。
- 3 回答
- 0 关注
- 382 浏览
添加回答
举报