Golang 不分配内存的指针类型能用吗?

Posted 知其黑、受其白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang 不分配内存的指针类型能用吗?相关的知识,希望对你有一定的参考价值。

阅读目录

示例

下面这个例子,先定义了一个类型为 *int 的指针类型,可是然后把 10 赋值给指针指向的值。

package main

import (
 "fmt"
)

func main() 
   var i *int
   *i=10
   fmt.Println(*i)

看起来好像没有啥问题,可为什么会报错呢?

PS E:\\TEXT\\test_go\\test> go run .\\main.go
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x1 addr=0x0 pc=0x37e516]

goroutine 1 [running]:
main.main()
        E:/TEXT/test_go/test/main.go:9 +0x16
exit status 2
PS E:\\TEXT\\test_go\\test> 

原因是我们只声明了指针类型,但并没有为其分配内存,没有内存地址,你赋给它的值应该存在哪里呢?

自然只能报错了。

正确的写法应该是这样,在赋值给,先使用 new 函数给 i 分配内存。

package main

import (
	"fmt"
)

func main() 
	var i *int
	i = new(int)
	*i = 10
	fmt.Println(*i)

变量赋值

package main

import (
	"fmt"
)

func main() 
	var i int = 10
	fmt.Println(i)

package main

import (
	"fmt"
)

func main() 
	var i *int = new(int)
	*i = 10
	fmt.Println(*i)

以上是关于Golang 不分配内存的指针类型能用吗?的主要内容,如果未能解决你的问题,请参考以下文章

golang的指针

Golang 引用类型介绍

用指针作为参数传值是否更节省内存?(c/c++/golang)

【golang】内存逃逸常见情况和避免方式

golang:make和new的区别

golang 内置函数new()