Go语言学习之旅19——new函数的使用

声明一个指针类型的变量,我们会这么做:

1
2
3
4
5
func main() {
var a *int
fmt.Println(a)
fmt.Printf("%T", a)
}

输出

1
2
<nil>
*int

由此可见,a确实是一个int类型的指针,但是并没有为其分配内存空间,所以在我们试图打印其内存地址的时候,输出结果是<nil>

如果我们需要修改该指针指向的值,就不得不为其先分配一个内存地址,我们知道:当变量被声明的时候,会创建内存并分配地址,所以方法一如下:

1
2
3
4
5
6
7
func main() {
var a *int
b := 10
a = &b // 将变量b的地址赋给指针a
fmt.Println(a)
fmt.Println(*a)
}

输出:

1
2
0xc000090000
10

但是显然这样做太麻烦了:我们需要创建一个中间变量b才能完成给指针类型分配内存地址的工作,这时候,就需要使用new函数了

方法二:使用new函数

1
2
3
4
5
6
func main() {
var a *int = new(int)
*a = 10
fmt.Println(*a)
fmt.Println(a)
}

new函数可以分配内存地址并返回保存该内存地址的指针