随笔 - 56  文章 - 0 评论 - 0 阅读 - 50738

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
28
29
30
31
32
33
34
35
36
37
package main
 
import "fmt"
 
func main() {
 
    y := []int{1, 2, 3, 4, 5}
 
    // slice 是传引用的,对内容的修改会影响到函数外,但是 append 不会影响到函数外
    changeRef(y)
    fmt.Println(y) //[100,2,3,4,5]
 
    //取引用变量的地址传入指针实现 append 可以在函数内部修改,说明引用和指针确实不是同一个概念
    appendPoint(&y)
    fmt.Println(y)
 
    z := [5]int{1, 2, 3, 4, 5}
    // 数组是传值的,对内容的修改不会影响到函数外
    changeArray(z)
    fmt.Println(z) //[1,2,3,4,5]
}
 
func changeRef(x []int) {
 
    x[0] = 100
    // 这里 对函数外没有影响
    x = append(x, 6, 7, 8) //但是 append 的设计比较奇怪,他返回一个新的引用,由于函数对引用的(地址)仍然是传值的,若想改变必须用返回值实现
    //同时 引用又不是一个指针 无法直接修改该地址处的值
}
 
func changeArray(x [5]int) {
    x[0] = 100
}
 
func appendPoint(x *[]int) {
    *x = append(*x, 4, 5, 6)
}
posted on   scala  阅读(397)  评论(0)    收藏  举报
点击右上角即可分享
微信分享提示