📜  Go 中函数的指针

📅  最后修改于: 2021-10-24 13:08:44             🧑  作者: Mango

先决条件:Go 中的指针

Go 编程语言或 Golang 中的指针是一个变量,用于存储另一个变量的内存地址。您还可以像变量一样将指针传递给函数。有两种方法可以做到这一点,如下所示:

  • 创建一个指针并将其传递给函数
  • 传递变量的地址

创建一个指针并将其传递给函数

在下面的程序中,我们使用了一个函数ptf ,它具有整数类型的指针参数,它指示函数只接受指针类型的参数。基本上,这个函数改变了变量x的值。开始时x包含值 100。但在函数调用之后,值更改为 748,如输出所示。

// Go program to create a pointer
// and passing it to the function
package main
  
import "fmt"
  
// taking a function with integer
// type pointer as an parameter
func ptf(a *int) {
  
    // dereferencing
    *a = 748
}
  
// Main function
func main() {
  
    // taking a normal variable
    var x = 100
  
        fmt.Printf("The value of x before function call is: %d\n", x)
  
    // taking a pointer variable
    // and assigning the address
    // of x to it
    var pa *int = &x
  
    // calling the function by
    // passing pointer to function
    ptf(pa)
  
    fmt.Printf("The value of x after function call is: %d\n", x)
  
}

输出:

The value of x before function call is: 100
The value of x after function call is: 748

将变量的地址传递给函数调用

考虑下面的程序,我们没有创建一个指针来存储变量x的地址,即像上面程序中的pa一样。我们直接将x的地址传递给函数调用,其工作方式类似于上面讨论的方法。

// Go program to create a pointer
// and passing the address of the
// variable to the function
package main
  
import "fmt"
  
// taking a function with integer
// type pointer as an parameter
func ptf(a *int) {
  
    // dereferencing
    *a = 748
}
  
// Main function
func main() {
  
    // taking a normal variable
    var x = 100
      
    fmt.Printf("The value of x before function call is: %d\n", x)
  
    // calling the function by
    // passing the address of
    // the variable x
    ptf(&x)
  
    fmt.Printf("The value of x after function call is: %d\n", x)
  
}

输出:

The value of x before function call is: 100
The value of x after function call is: 748

注意:您还可以使用短声明运算符(:=) 来声明上述程序中的变量和指针。