先决条件: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
注意:您还可以使用短声明运算符(:=) 来声明上述程序中的变量和指针。