```go
func abc(){
a := 1
p := &a
return p
}
```
以上在go中可以返回局部指针,而c++不可以,而在go中,这样从局部返回指针,是否符合规范
```go
package main
import "fmt"
var p *int
func abc2(){
var a=1
p=&a
}
func main() {
abc2()
fmt.Println(*p) //输出:1
fmt.Println(*p) //仍然输出:1
}
```
c++中,以上函数abc2()在执行完后,p会成为悬垂指针,而go中正常,在go中,这样是否也规范?
c++不行的,go中正常,现在感觉思维混乱了,求指导。
更多评论
在官方的[effective go](https://golang.org/doc/effective_go.html#composite_literals)中有一句话
> Note that, unlike in C, it's perfectly OK to return the address of a local variable; the storage associated with the variable survives after the function returns.
所以在 go 中,返回指向局部变量的指针是没问题的。
#1
Go 编译器支持逃逸分析,编译期发现一个局部变量的指针被外部使用了,就会在堆里而不是栈里分配内存。
不习惯就不要这么用呗,Go只是允许这么用,又没说必须这么用
#3