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 不分配内存的指针类型能用吗?的主要内容,如果未能解决你的问题,请参考以下文章