2.9 不分配内存的指针类型能用吗? ================================ 下面这个例子,先定义了一个类型为 ``*int`` 的指针类型,可是然后把 ``10`` 赋值给指针指向的值 .. code:: go package main import ( "fmt" ) func main() { var i *int *i=10 fmt.Println(*i) } 看起来好像没有啥问题,可为什么会报错呢? .. code:: go $ go run demo.go panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x109cea3] goroutine 1 [running]: main.main() /Users/MING/Code/Golang/src/demo/demo.go:9 +0x23 exit status 2 原因是我们只声明了指针类型,但并没有为其分配内存,没有内存地址,你赋给它的值应该存在哪里呢?自然只能报错了。 正确的写法应该是这样,在赋值给,先使用 new 函数给 i 分配内存。 .. code:: go package main import ( "fmt" ) func main() { var i *int i = new(int) *i=10 fmt.Println(*i) }