17-pointer

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

package main

import "fmt"

func zeroval(ival int) { // zeroval函数的参数是int,所以参数将按值传递
	ival = 0 // zeroval将会获得ival值的拷贝,而不是调用函数时传入的ival
}

func zeroptr(iptr *int) { // zeroptr函数的参数是*int ,这表示它需要一个int指针
	*iptr = 0 // 函数体中的*iptr解除在那个地址上的从内存地址到当前值的引用,为解除引用的指针赋值会改变引用地址的值
}

func main() {
	i := 1
	fmt.Println("initial:", i)

	zeroval(i)
	fmt.Println("zeroval:", i)

	zeroptr(&i) // &i语法给出i的内存地址,即指向i的指针
	fmt.Println("zeroptr:", i)

	fmt.Println("pointer:", &i) // 指针也可以被打印
}

// zeroval不会更改main()中的i但是zeroptr会更改因为它具有对该变量的内存地址的引用
上次修改: 10 January 2020