![QQ截图20180801113504.png](https://static.studygolang.com/180801/d6de724ceed44938ae7409f4b97e319e.png)
我传的是指针切片, 为什么这里的地址和main函数里的number1地址不一样?
![QQ截图20180801173858.png](https://static.studygolang.com/180801/91a3d72ddca621b2f59bfe5b4ea738ce.png)
两个切片的结果还是不相同
#2
更多评论
你main函数中打印的是切片,demo4中打印的是切片地址。
而且切片在函数传参的时候直接传就行了,不用加&,切片是一个结构体,类似这样
```go
type slice struct {
ptr *T,
length int,
cap int
}
```
ptr指向切片首个元素的地址,所以说函数传切片是地址传递
#1
demo3()中,你可以通过number1[n]来修改切片内部成员的值,而把number2附给number1只会在demo3()中有效,main()中的number1和demo3()中的number1是2个变量
如果你要新建切片附给number,可以这么做
```go
func main() {
var num []int
fmt.Printf("main %p %v \n", num, num)
demo(&num)
fmt.Printf("main %p %v \n", num, num)
}
func demo(num1 *[]int) {
fmt.Printf("demo %p %v \n", *num1, *num1)
num2 := []int{2, 4}
*num1 = num2
fmt.Printf("demo %p %v \n", *num1, *num1)
}
```
#3