\
您当前的位置 : 首页 >> 帮助中心

Go 语言指针

来源:恩氏滤油机
时间:2024-09-20
浏览量:1001

来自 ruby,考虑 golang 指针确实需要转变思维。

在红宝石中,

变量是对对象的引用。

当您将一个变量分配给另一个变量时,两个变量都指向同一个对象。

通过任何变量更改对象将反映在所有引用中

# variable array_a is a reference to an array object
array_a = [1,2,3]

# array_b and array_c now points to the same array object as array_a
array_b = array_a
array_c = array_a

# updating array_b will update the underlying array object defined by 'array_a'
# array_a, array_b and array_c will have the same output
array_b 



在 go 中:

变量可以存储实际值或指向值的指针(内存地址)。

将一个变量分配给另一个变量将复制该值

这会产生两个自变量

指针允许您从多个变量引用相同的数据。-

go 指针(*type)引用存储数据的内存地址。 它需要像 *string=0x14000114180 这样的东西。 go 值(类型)保存实际数据 复制会创建一个新的独立实例
// main.go

package main

import "fmt"

func main() {
  // create an array of length 4, with initial values [1, 2, 3, 0]
  array_a := [4]int{1,2,3}

  // 'array_b' references the same underlying array as 'array_a'
  array_b := array_a
  array_c := array_c

  array_b[3] = 4
  fmt.println("array_a: " array_a)
  fmt.println("array_b: " array_b)
  fmt.println("array_c: " array_c)
}

// output
// array_a:  [1 2 3 0]
// array_b:  [1 2 3 4] 



为了达到与 ruby​​ 相同的结果,我们需要确保我们没有将 array_a 的值“复制”到 array_b 和 array_c。

相反,我们需要为 array_b 和 array_c 分配一个指向 array_a 的指针。

// main.go

package main

import "fmt"

func main() {
  // Create an array of length 4, with initial values [1, 2, 3, 0]
  array_a := [4]int{1,2,3}

  // 'array_b' and 'array_c' is a pointer to the memory address that stores the value of 'array_a'
  array_b := &array_a
  array_c := &array_c

  array_b[3] = 4

  // Since array_a does not store a pointer, we print it directly
  // array_a (value)
  // +-------------------+
  // | [1, 2, 3, 4]      |
  // +-------------------+
  //     ^
  //     |
  // &array_a (address) 




          

            
        

以上就是Go 语言指针的详细内容,更多请关注本网内其它相关文章!

免责申明

以上展示内容来源于合作媒体、企业机构、网友提供或网络收集整理,版权争议与本站无关,文章涉及见解与观点不代表恩氏滤油机网官方立场,请读者仅做参考。本文欢迎转载,转载请说明出处。若您认为本文侵犯了您的版权信息,或您发现该内容有任何涉及有违公德、触犯法律等违法信息,请您立即联系我们及时修正或删除。
Copyright © 2004-2026 BaiJiaMai.Com 重庆恩氏过滤设备制造有限公司 版权所有  网站备案号:渝ICP备2024041059号