登录
首页 >  Golang >  Go问答

如何在定义范围之外使用指向相同结构对象的指针

来源:stackoverflow

时间:2024-02-23 20:42:29 427浏览 收藏

编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天golang学习网就整理分享《如何在定义范围之外使用指向相同结构对象的指针》,文章讲解的知识点主要包括,如果你对Golang方面的知识点感兴趣,就不要错过golang学习网,在这可以对大家的知识积累有所帮助,助力开发能力的提升。

问题内容

在下面的代码中,两个指针变量 r1r2 (类型为 *rect)引用同一个结构对象(类型为 rect):

type rect struct {
    width int
}

func main() {
    r1 := new(rect)
    r2 := new(rect)
    r1 = r2

    fmt.printf("%p, %p", r1, r2) // prints the addresses of the rects being pointed to by each variable
}

0xc00001c038、0xc00001c038 (良好输出)

如何从定义它们的函数外部将 r1r2 引用到同一结构对象?换句话说,如何创建一个函数来替换 r1 = r2?我尝试取消引用,然后从外部函数内分配变量,但未能成功将 r1 引用到 r2 的引用结构对象:

func assign(r1, r2 *Rect) {
    *r1 = *r2
}

func main() {
    r1 := new(Rect)
    r2 := new(Rect)
    assign(r1, r2)

    fmt.Printf("%p, %p", r1, r2) // prints the addresses of the Rects being pointed to by each variable
}

0xc00001c030、0xc00001c038 (错误输出)

演示: https://go.dev/play/p/ld0c5bkmxo3


正确答案


如果您需要更改函数内指针指向的位置,则必须传递它的地址:

func assign(r1, r2 **Rect) {
    *r1 = *r2
}

func main() {
    r1 := new(Rect)
    r2 := new(Rect)
    assign(&r1, &r2)

    fmt.Printf("%p, %p", r1, r2) // prints the addresses of the Rects being pointed to by each variable
}

演示:https://go.dev/play/p/5fAakjB50JJ

今天关于《如何在定义范围之外使用指向相同结构对象的指针》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

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