先决条件:Golang 中的指针
Go 编程语言或 Golang 中的指针是一个变量,用于存储另一个变量的内存地址。而数组是一个固定长度的序列,用于在内存中存储同构元素。
您可以使用指向数组的指针并将该指针作为参数传递给函数。为了理解这个概念,让我们举一个例子。在下面的程序中,我们使用了一个有 5 个元素的指针数组arr 。我们想使用一个函数来更新这个数组。意味着在函数内部修改数组(这里的数组是{78, 89, 45, 56, 14} ),这将反映在调用者处。所以这里我们采用了函数updatearray ,它具有指向数组的指针作为参数类型。使用updatearray(&arr)代码行,我们传递数组的地址。内部函数(*funarr)[4] = 750或funarr[4] = 750代码行使用解引用概念为数组分配新值,该值将反映在原始数组中。最后,程序将给出输出[78 89 45 56 750] 。
// Golang program to pass a pointer to an
// array as an argument to the function
package main
import "fmt"
// taking a function
func updatearray(funarr *[5]int) {
// updating the array value
// at specified index
(*funarr)[4] = 750
// you can also write
// the above line of code
// funarr[4] = 750
}
// Main Function
func main() {
// Taking an pointer to an array
arr := [5]int{78, 89, 45, 56, 14}
// passing pointer to an array
// to function updatearray
updatearray(&arr)
// array after updating
fmt.Println(arr)
}
输出:
[78 89 45 56 750]
注意:在 Golang 中,不建议使用指向数组的指针作为函数的参数,因为代码变得难以阅读。此外,它不被认为是实现这一概念的好方法。为此,您可以使用切片而不是传递指针。
例子:
// Golang program to illustrate the
// concept of passing a pointer to an
// array as an argument to the function
// using a slice
package main
import "fmt"
// taking a function
func updateslice(funarr []int) {
// updating the value
// at specified index
funarr[4] = 750
}
// Main Function
func main() {
// Taking an slice
s := [5]int{78, 89, 45, 56, 14}
// passing slice to the
// function updateslice
updateslice(s[:])
// displaying the result
fmt.Println(s)
}
输出:
[78 89 45 56 750]