登录
首页 >  Golang >  Go问答

涉及返回指针的函数问题

来源:stackoverflow

时间:2024-02-21 11:33:22 422浏览 收藏

你在学习Golang相关的知识吗?本文《涉及返回指针的函数问题》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

我写了这个测试代码:

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)
}

我希望看到:

11
11
address1
address1

假设第二次调用将为函数变量使用相同的空间(基于我的 c 背景,在函数停止工作后,放置在堆栈中的所有函数变量都可以在下一个函数调用中重写)。但我得到的是:

5
11
address1
address2

为什么我可能会得到这个结果? 为什么与预期输出有差异?


解决方案


此行为是逃逸分析的结果。编译器检测到变量 result 转义了该函数,因此它被分配在堆上。这就是为什么每次调用 getintpointer 都会返回一个新的 result 指针。该功能相当于:

func getIntPointer(i int) *int {
    result:=new(int)
    *result=i+1
    return result
}

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>