golang方法返回局部变量指针

go的方法可以直接返回局部变量的指针,这主要依赖go是有runtime的语言,编译器在发现有变量可以逃逸出去的时候会在堆上分配变量而不是栈上,这样就可以返回该变量的指针了,且会使该地址的引用+1,当生命空间结束时,gc会去回收。

package main

import "fmt"

func test() *int {
    var inner int = 100
    return &inner
}

func main() {
    outer := test()
    fmt.Println(outer, *outer)
}

作为对比,C语言就完全需要程序员自己去控制内存了,如果需要从函数内部返回指针,那么需要程序员自己malloc在堆上分配空间,并且需要在外部使用者用完之后即使的free掉。如果直接像go那样返回指针,要么编译不过,要么也是返回一个已经不该使用的栈内存地址,使用该地址会造成严重的错误。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容