指针是存储另一个变量的内存地址的变量
指针的空值为nil
使用新函数创建指针
size := new(int)
fmt.Printf("Size value is %d, type is %T, address is %v\n", *size, size, size)
*size = 85
fmt.Println("New size value is", *size)
Size value is 0, type is *int, address is 0x414020
New size value is 85
指针的解引用
b := 255
a := &b
fmt.Println("address of b is", a)
fmt.Println("value of b is", *a)//Here
向函数传递指针参数
函数返回局部变量的指针是完全合法的。Go 编译器足够智能,它会在堆上分配这个变量。
package main
import (
"fmt"
)
func hello() *int {
i := 5
return &i
}
func main() {
d := hello()
fmt.Println("Value of d", *d)
}
上面程序的第9行,我们从hello函数中返回局部变量的地址i。此代码的行为在 C 和 C++ 等编程语言中是未定义的,因为一旦函数返回,变量i就会超出范围。但是在 Go 的情况下,编译器会进行转义分析,并·在地址转义本地范围时在堆上进行分配。因此,该程序将起作用并打印:Value of d 5
Go不支持指针运算
不要向函数传递数组的指针 , 而应该使用切片