array与slice
array和slice定义
注意
(1)可以看出slice是可以随心所欲的表示一个数组上的一个或者一段元素,更关键的是slice不是一个值类型,而是一个引用类型,就好比指针一样,对slice取得的元素进行写操作实际是影响到了底层的数组层,slice真的只是一层薄薄的操作封装罢了。因此,slice有一个重要的用途就是作为函数的参数,就这可以避免直接传递数组而导致整个数组发生一次内存拷贝。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28package main
import "fmt"
func main() {
a := []int{0,1,2,3,4,5,6,7,8,9}
s := a[0:5]
Print(a, "a")
Print(s, "s")
s1 := append(s, 0)
fmt.Printf("=================\n")
Print(a, "a")
Print(s, "s")
Print(s1, "s1")
}
func Print(o []int, name string) {
fmt.Printf("%s: ", name)
for _, v := range o {
fmt.Printf("%d ", v)
}
fmt.Printf("\n")
}
1 | 输出结果为: |
(2)使用range遍历数组时,实际上是数组的copy1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27package main
import "fmt"
func main() {
arr := [5]int {1, 2, 3, 4, 5}
fmt.Println(arr)
for _, item := range arr {
item += 10
}
fmt.Println(arr)
n := len(arr)
for i := 0; i < n; i ++ {
arr[i] += 10
}
fmt.Println(arr)
}
/*
* 运行结果
* [1, 2, 3, 4, 5]
* [1, 2, 3, 4, 5]
* [11, 12, 13, 14, 15]
* 为什么第一个循环没有改变原数组呢?
*/