Go 示例: 指针

Go 支持指针,允许您在程序中传递对值和记录的引用。

package main
import "fmt"

我们将通过两个函数 zerovalzeroptr 来展示指针的工作原理与值的对比。zeroval 具有一个 int 参数,因此参数将按值传递给它。zeroval 将获得一个与调用函数中不同的 ival 副本。

func zeroval(ival int) {
    ival = 0
}

相比之下,zeroptr 具有一个 *int 参数,这意味着它接受一个 int 指针。函数体中的 *iptr 代码然后解除引用指针,从其内存地址到该地址处的当前值。将值分配给解除引用的指针会更改引用地址处的值。

func zeroptr(iptr *int) {
    *iptr = 0
}
func main() {
    i := 1
    fmt.Println("initial:", i)
    zeroval(i)
    fmt.Println("zeroval:", i)

&i 语法给出 i 的内存地址,即指向 i 的指针。

    zeroptr(&i)
    fmt.Println("zeroptr:", i)

指针也可以打印。

    fmt.Println("pointer:", &i)
}

zeroval 不会更改 main 中的 i,但 zeroptr 会,因为它对该变量的内存地址有引用。

$ go run pointers.go
initial: 1
zeroval: 1
zeroptr: 0
pointer: 0x42131100

下一个示例:字符串和符文.