11_数组与值复制
声明定长数组,理解长度属于类型、赋值会复制元素。
Go 基础专题 11:数组与值复制
学习目标:声明定长数组,理解长度属于类型、赋值会复制元素。
核心知识
数组 [N]T 含固定数量的 T 值,长度 N 是类型的一部分。[3]int{1,2,3} 与 [4]int{1,2,3,4} 类型不同。省略长度可写 [...]int{1,2,3} 让编译器计数。数组默认值按元素类型零值初始化。
package main
import "fmt"
func main() {
original := [3]int{1, 2, 3}
copied := original
copied[0] = 9
fmt.Println(original, copied) // [1 2 3] [9 2 3]
}
数组赋值和传参会复制整个数组,适合长度固定且较小的数据。大多数动态集合用切片 []T;切片赋值不会复制底层元素,行为与数组不同。用 len(array) 得到长度,索引范围为 0 到 len-1,越界会 panic。
元素类型可比较时,数组可以用 == 比较每个对应元素。数组若包含切片或映射等不可比较字段,就不能整体比较。二维数组如 [2][3]int 可以表示固定矩阵,但动态表格通常用切片的切片。
逐步理解
观察复制示例:copied := original 复制三个整数,修改副本不会影响原数组。若元素是指针,复制的是指针值,指向的对象仍可能共享;“数组值复制”不自动等于对象图深复制。把 [3]int 作为函数参数也会发生数组值复制,这与切片参数的行为不同。
动手练习
练习:创建长度 3 的字符串数组,修改副本第一个元素,验证原数组不变。答案要点:先 copy := original,再打印两者。