数组和切片数据类型

2024-01-04

我发现自己很困惑array and slice数据类型。

从 Go 文档来看,数组的描述如下:

数组在 Go 和 C 中的工作方式存在重大差异。在 Go 中,

  • 数组是值。将一个数组分配给另一个数组会复制所有元素。
  • 特别是,如果将数组传递给函数,它将收到该数组的副本,而不是指向它的指针。
  • 数组的大小是其类型的一部分。类型 [10]int 和 [20]int 是不同的。

功能:

与 C 家族中的所有语言一样,Go 中的所有内容都被传递 价值。也就是说,一个函数总是获取该事物的副本 通过,就像有一个赋值语句赋值一样 到参数。例如,将 int 值传递给函数 制作 int 的副本,并传递指针值制作 a 的副本 指针,但不是它指向的数据。

为什么sort.Ints(arrayValue)当我将传递的变量声明为数组而不是切片时修改它吗?

Code

var av = []int{1,5,2,3,7}

fmt.Println(av)
sort.Ints(av)
fmt.Println(av)
return

Output

[1 5 2 3 7]
[1 2 3 5 7]

See "切片:用法和内部结构 http://golang.org/doc/articles/slices_usage_and_internals.html"

var av = []int{1,5,2,3,7}

那是一个切片,而不是一个数组。

切片文字的声明方式与数组文字类似,只是省略了元素计数。

这就解释了为什么排序函数会修改content切片所引用的内容。

正如下面评论者Kirk https://stackoverflow.com/users/1236394/kirk, sort.Ints https://golang.org/pkg/sort/#Ints如果您向其传递数组而不是切片,则会出现错误。

func Ints(a []int)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数组和切片数据类型 的相关文章

随机推荐