mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-11-13 09:16:10 +08:00
修改部分描述,添加必要的标点符号,补充代码超链接 (#804)
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
# 7.1 声明和初始化
|
||||
|
||||
## 7.1.1 概念
|
||||
数组是具有相同 **唯一类型** 的一组已编号且长度固定的数据项序列(这是一种同构的数据结构);这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。数组长度必须是一个常量表达式,并且必须是一个非负整数。数组长度也是数组类型的一部分,所以[5]int和[10]int是属于不同类型的。数组的编译时值初始化是按照数组顺序完成的(如下)。
|
||||
数组是具有相同 **唯一类型** 的一组已编号且长度固定的数据项序列(这是一种同构的数据结构);这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。数组长度必须是一个常量表达式,并且必须是一个非负整数。数组长度也是数组类型的一部分,所以 `[5]int` 和 `[10]int` 是属于不同类型的。数组的编译时值初始化是按照数组顺序完成的(如下)。
|
||||
|
||||
**注意事项** 如果我们想让数组元素类型为任意类型的话可以使用空接口作为类型(参考 [第 11 章](11.9.md))。当使用值时我们必须先做一个类型判断(参考 [第 11 章](11.3.md))。
|
||||
|
||||
数组元素可以通过 **索引**(位置)来读取(或者修改),索引从 0 开始,第一个元素索引为 0,第二个索引为 1,以此类推。(数组以 0 开始在所有类 C 语言中是相似的)。元素的数目,也称为长度或者数组大小必须是固定的并且在声明该数组时就给出(编译时需要知道数组长度以便分配内存);数组长度最大为 2Gb。
|
||||
数组元素可以通过 **索引**(位置)来读取(或者修改),索引从 0 开始,第一个元素索引为 0,第二个索引为 1,以此类推。(数组以 0 开始在所有类 C 语言中是相似的)。元素的数目(也称为长度或者数组大小)必须是固定的并且在声明该数组时就给出(编译时需要知道数组长度以便分配内存);数组长度最大为 2GB。
|
||||
|
||||
声明的格式是:
|
||||
|
||||
@@ -33,7 +33,7 @@ arr1 的长度是 5,索引范围从 0 到 `len(arr1)-1`。
|
||||
|
||||
runtime error: index out of range
|
||||
|
||||
由于索引的存在,遍历数组的方法自然就是使用 for 结构:
|
||||
由于索引的存在,遍历数组的方法自然就是使用 for 结构:
|
||||
|
||||
- 通过 for 初始化数组项
|
||||
- 通过 for 打印数组元素
|
||||
@@ -99,7 +99,7 @@ for i := range a {
|
||||
|
||||
Go 语言中的数组是一种 **值类型**(不像 C/C++ 中是指向首元素的指针),所以可以通过 `new()` 来创建: `var arr1 = new([5]int)`。
|
||||
|
||||
那么这种方式和 `var arr2 [5]int` 的区别是什么呢?arr1 的类型是 `*[5]int`,而 arr2的类型是 `[5]int`。
|
||||
那么这种方式和 `var arr2 [5]int` 的区别是什么呢?arr1 的类型是 `*[5]int`,而 arr2 的类型是 `[5]int`。
|
||||
|
||||
这样的结果就是当把一个数组赋值给另一个时,需要再做一次数组内存的拷贝操作。例如:
|
||||
|
||||
@@ -181,7 +181,7 @@ var arrAge = [5]int{18, 20, 15, 22, 16}
|
||||
var arrLazy = [...]int{5, 6, 7, 8, 22}
|
||||
```
|
||||
|
||||
`...` 可同样可以忽略,从技术上说它们其实变化成了切片。
|
||||
`...` 同样可以忽略,从技术上说它们其实变成了切片。
|
||||
|
||||
第三种变化:`key: value 语法`
|
||||
|
||||
@@ -258,7 +258,7 @@ func main() {
|
||||
|
||||
## 7.1.4 将数组传递给函数
|
||||
|
||||
把一个大数组传递给函数会消耗很多内存。有两种方法可以避免这种现象:
|
||||
把一个大数组传递给函数会消耗很多内存。有两种方法可以避免这种情况:
|
||||
|
||||
- 传递数组的指针
|
||||
- 使用数组的切片
|
||||
|
||||
Reference in New Issue
Block a user