我发现我的代码有不同的结果,如下所示,这是一个指向 Go.Tour 编译器(http://tour.golang.org/welcome/1)和我的本地编译器(Go 版本 1.4)之间的幻灯片的指针
哪一个是正确的?而且我还想知道我的代码 p1、p2 之间的指针是如何工作的?因为地址似乎没有移动,但 p1 使用引用,而 p2 使用复制。
package main
import "fmt"
func main() {
var a []int
var b []int
a = append(a, 0)
b = append(b, 0)
p := &a[0]
fmt.Printf("a[0] = %d pointer=%d, p = %d \n", a[0], &a[0], *p)
a[0] = 2
fmt.Printf("a[0] = %d pointer=%d, p = %d \n", a[0], &a[0], *p)
/*
a[0] = 0, p = 0
a[0] = 2, p = 2
*/
var c []int
var d []int
c = append(c, 0)
d = append(d, 0)
p2 := &c[0]
fmt.Printf("c[0]=%d pointer=%d, p2 = %d\n", c[0], &c[0], *p2)
c = append(c, 1)
c[0] = 2
fmt.Printf("c[0]=%d pointer=%d, p2 = %d\n", c[0], &c[0], *p2)
/*
c[0]=0, p2 = 0
c[0]=2, p2 = 0
copy the same code run in http://tour.golang.org/welcome/1 will get.
c[0]=0, p2 = 0
c[0]=2, p2 = *2* << why??
*/
}
更新:我使用指向切片的指针的原因是我试图测试在 Go 的 Web 端存在 RUST 的向量 push_pack 问题。请参阅http://doc.rust-lang.org/nightly/intro.html#ownership。
RISEBY
相关分类