Go語言將陣列傳遞給函式

2019-10-16 23:16:48

如果想傳遞一個一維陣列作為引數到一個函式中,必須宣告函式形式引數以下面兩種方式的其中一種,兩個宣告方法都產生類似的結果,因為每個方式都告訴編譯器要接收一個整數陣列。類似的方式,可以傳遞多維陣列作為形式引數。

方法-1

形式引數作為一個已知大小陣列如下:

void myFunction(param [10]int)
{
.
.
.
}

方法-2

形式引數作為一個未知道大小的陣列如下:

void myFunction(param []int)
{
.
.
.
}

範例

現在,考慮下面的函式,它將陣列作為引數和另一個指定陣列大小的引數,並基於傳遞的引數,計算陣列傳遞的陣列中每個元素的平均值返回,如下:

func getAverage(arr []int, int size) float32
{
   var i int
   var avg, sum float32  

   for i = 0; i < size; ++i {
      sum += arr[i]
   }

   avg = sum / size

   return avg;
}

現在,呼叫上面的函式如下:

package main

import "fmt"

func main() {
   /* an int array with 5 elements */
   var  balance = []int {1000, 2, 3, 17, 50}
   var avg float32

   /* pass array as an argument */
   avg = getAverage( balance, 5 ) ;

   /* output the returned value */
   fmt.Printf( "Average value is: %f ", avg );
}
func getAverage(arr []int, size int) float32 {
   var i,sum int
   var avg float32  

   for i = 0; i < size;i++ {
      sum += arr[i]
   }

   avg = float32(sum / size)

   return avg;
}

當上面的程式碼編譯並執行時,它產生以下結果:

Average value is: 214.400000

正如上面所看到的,陣列的長度與函式無關,因為Go對形式引數不執行邊界檢查。