为了账号安全,请及时绑定邮箱和手机立即绑定

关于函数返回指针的问题

关于函数返回指针的问题

Go
牛魔王的故事 2022-06-27 10:06:22
我写了这个测试代码:import "fmt"func getIntPointer(i int) *int {    var result int    result = i + 1    return &result}func main () {    ip1 := getIntPointer(4)    ip2 := getIntPointer(10)    fmt.Println(*ip1, *ip2)    fmt.Printf("%p %p\n", ip1, ip2)}我希望看到:1111address1address1假设第二次调用将为函数变量使用相同的空间(基于我的 C 背景,在函数停止工作后,所有放置在堆栈中的函数变量都可以用下一个函数调用重写)。但相反,我得到了:511address1address2为什么我可能会得到这个结果?为什么与预期输出有差异?
查看完整描述

1 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

这种行为是逃逸分析的结果。编译器检测到变量result转义了函数,所以它是在堆上分配的。这就是为什么每次调用都getIntPointer返回一个新result指针的原因。该函数等价于:


func getIntPointer(i int) *int {

    result:=new(int)

    *result=i+1

    return result

}


查看完整回答
反对 回复 2022-06-27
  • 1 回答
  • 0 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号