📜  Golang 指向数组的指针作为函数参数

📅  最后修改于: 2021-10-25 02:48:33             🧑  作者: Mango

先决条件:Golang 中的指针

Go 编程语言或 Golang 中的指针是一个变量,用于存储另一个变量的内存地址。而数组是一个固定长度的序列,用于在内存中存储同构元素。

您可以使用指向数组的指针并将该指针作为参数传递给函数。为了理解这个概念,让我们举一个例子。在下面的程序中,我们使用了一个有 5 个元素的指针数组arr 。我们想使用一个函数来更新这个数组。意味着在函数内部修改数组(这里的数组是{78, 89, 45, 56, 14} ),这将反映在调用者处。所以这里我们采用了函数updatearray ,它具有指向数组的指针作为参数类型。使用updatearray(&arr)代码行,我们传递数组的地址。内部函数(*funarr)[4] = 750funarr[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]