跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • golang 中的值传递和指针传递的理解?
未分類
14 11 月 2020

golang 中的值传递和指针传递的理解?

golang 中的值传递和指针传递的理解?

資深大佬 : chinafengzhao 2

上代码

 package main   import(     "fmt" )  // 声明一个基于 int 的类型 Integer type Integer int   // 基于指针的传递( Integer 类型的指针变量 a ) func (a* Integer) Add_pointer (b Integer) {     *a += b }  // 基于值的传递,按理,经过这次调用,也是对 a 进行重新赋值,为什么调用之后,再去打印,还是以前的值? func (a Integer) Add_value (b Integer) {     a += b }   func main() {     var a Integer = 1     var b Integer = 1     a.Add_pointer(2)     b.Add_value(2)     fmt.Println("a =", a)     fmt.Println("b =", b) }  // a=3 // b=1   

为什么会有这个输出?

大佬有話說 (14)

  • 資深大佬 : yatsun

    学过 c 吗,子函数里的是形参,是额外开辟的空间,不会改变原本的值

  • 資深大佬 : BoarBoar

    C 语言学过吧?一样的
    指针就是变量 a 的内存地址,在原变量上+2
    对于 b 实际上是新创建了一个变量,暂且叫做 b(1)吧,b(1)实际上是新的一块内存,+2 后对原变量没影响

  • 資深大佬 : raaaaaar

    忘记指针,忘记值传递,忘记传值这些概念。
    记住:一个是操作一块内存,一个是操作两块内存。

  • 資深大佬 : shangyes

    方法是函数
    “`golang
    func Add_pointer(a* Integer, b Integer) {
    *a += b
    }

    func Add_value(a, b Integer) {
    a += b
    }
    “`

  • 資深大佬 : yrj

    @raaaaaar 哈哈,这么理解挺好

  • 資深大佬 : cholerae

    go 里面只有值传递,记着这一点就行了。只不过有时候这个值是一个指针。

  • 資深大佬 : cco

    值传递!没有别的。

  • 資深大佬 : xkeyideal

    从 C 语言的角度来说,a.Add_pointer(2) 这一行代码都不会编译通过的,另外呢,无脑指针会比较方便,但指针并非都是最优解

  • 資深大佬 : hzfyjgw

    http://team.jiunile.com//blog/2020/11/go-copy-struct-or-pointer.html

  • 資深大佬 : lance6716

    其实一直对这个很迷惑,尤其是到了含有指针的结构体时:传指针的地址就不叫传值了吗

  • 資深大佬 : joesonw

    4 是正解. go 不是 OOP, 没有 class, 都只是方法而已.
    例如

    type S struct {}

    func (s *S) Say() {
    println(“hello world”)
    }

    func main() {
    var s *S
    s.Say()
    }

    是正常运行的
    https://play.golang.org/p/7pQ51IZ-4rB

  • 資深大佬 : chor02

    可以理解為 func (a* Integer)和 func (a Integer)中的 a*和 a 也是一個參數

  • 資深大佬 : ghjacky

    这个是 go 里边的 receiver,不过类似于参数传递,都是值传递(拷贝了一份数据),指针传递也是值传递,只不过指针类型的数据本身就是一内存地址,所以,更改指针指向内存空间的值,原始值也会改变啊。

  • 資深大佬 : ScepterZ

    你这句话属于瞎说……这个 a 是复制来的,不是原来那个
    基于值的传递,按理,经过这次调用,也是对 a 进行重新赋值

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具