Go 使用指针

Go 使用指针,指针是另一个与变量相关且必须掌握的要素。在Go语言中声明变量时,将在计算机内存中给它分配一个位置,以便能够存储、修改和获取变量的值。要获取变量在计算机内存中的地址,可在变量名前加上&字符。如下程序将一个变量的内存地址打印到终端。

package main

 import (
  "fmt"
 )

 func main() {
  s := "Hello World,www.coolcou.com"
  fmt.Println(&s)
}

如果您运行这些代码,将打印一个由字母和数字组成的序列,它表示变量在内存中的地址,而不是变量的值。

输出结果如下:
Go 使用指针

这是内存地址的十六进制表示。如果您不知道十六进制为何物,也不用担心,您只需知道每个变量的值都存储在不同的内存地址中就够了。如下程序将一个整型变量传递给了一个函数,并打印了两个变量的内存地址。您认为它们的内存地址相同吗?

 package main

 import (
  "fmt"
 )

 func showMemoryAddress(x *int) {
  fmt.Println(x)
  return
 }

 func main() {
  i := 1
  fmt.Println(&i)
  showMemoryAddress(&i)
 }

这个程序运行时显示两个内存地址。
Go 使用指针

将变量传递给函数时,会分配新内存并将变量的值复制到其中。这样将有两个变量实例,它们位于不同的内存单元中。一般而言,这不可取,因为这将占用更多的内存,同时由于存在变量的多个副本,很容易引入Bug。考虑到这一点,Go提供了指针。

指针是Go语言中的一种类型,指向变量所在的内存单元。要声明指针,可在变量名前加上星号字符。可将前面的示例修改成如下所示的代码,以使用指针。

 package main

 import (
  "fmt"
 )

 func showMemoryAddress(x *int) {
  fmt.Println(x)
  return
 }

 func main() {
  i := 1
  fmt.Println(&i)
  showMemoryAddress(&i)
 }

这个程序运行时显示两个内存地址。
Go 使用指针

对代码的修改情况说明如下。

  • 将传递给showMemoryAddress的值从i改成了&i。i前面的和号&意味着引用的是变量i的值所在的内存地址。
  • 将函数showMemoryAddress的第一个参数的类型从int改成了*int。加上星号意味着参数的类型为指向整数的指针,而不是整数。
  • 在函数showMemoryAddress中打印变量时,不需要使用和号,因为它本来就是指针。

如果要使用指针指向的变量的值,而不是其内存地址,该怎么办呢?可在指针变量前加上星号。

func showMemoryAddress(x *int) {
fmt.Println(*x)
return
}

使用星号后,打印的是值而不是内存地址。

酷客教程相关文章:

赞(0)

评论 抢沙发

评论前必须登录!