主要区别:
长度:数组的长度是固定的,一旦声明就不能改变;而切片的长度是动态的,可以在运行时改变大小。
类型声明:数组在声明时需要指定长度,而切片不需要。
内存分配:数组在栈上分配内存,而切片在堆上分配内存。
示例:
import "fmt"func main() {// 声明一个长度为5的整型数组var arr [5]intfmt.Println("Array:", arr)// 声明一个整型切片,初始为空var slice []intfmt.Println("Slice:", slice)// 使用make函数创建一个长度为5的切片slice = make([]int, 5)fmt.Println("Slice after make:", slice)// 为数组和切片赋值for i := 0; i < 5; i++ {arr[i] = islice[i] = i}fmt.Println("Array with values:", arr)fmt.Println("Slice with values:", slice)// 尝试扩展切片slice = append(slice, 5)fmt.Println("Slice after appending:", slice)// 尝试扩展数组(会报错,因为数组长度固定)// arr = append(arr, 5) // 编译错误:first argument to append must be slice; have [5]int}
输出:
Array: [0 0 0 0 0]
Slice: []
Slice after make: [0 0 0 0 0]
Array with values: [0 1 2 3 4]
Slice with values: [0 1 2 3 4]
Slice after appending: [0 1 2 3 4 5]
