Go語言數組淺析

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

先看一個簡單的數組定義:

var array [3]int

上面語句定義了變數array,這個變數是一個包含3個整數的數群組類型。可以使用Go語言內建的len函數得到數組長度:

package mainimport (    "fmt")func main() {    var array [3]int    fmt.Println(len(array))}

執行以上程式結果:

3

需要注意的是,在Go語言中,數組的長度是數群組類型的一部分,它必須是一個常量運算式,即長度的值在程式編譯時間是可以得到的。請看下面這個程式:

package mainimport (    "fmt")func print_array(array []int) {    fmt.Printf("In function, array is %v\n", array)}func main() {    var array [3]int    print_array(array )}

編譯這個程式會產生下面的錯誤:

main.go:14: cannot use array (type [3]int) as type []int in argument to print_array

Go語言要求傳入函數的形參和實參的類型必須是完全符合的,而array的類型是[3]int,不是[]int,所以編譯會出錯。

Go語言函數參數都是傳值調用,所以如果函數的參數是數組的話,那麼實際傳入的將是原數組的拷貝。請看這個例子:

package mainimport (    "fmt")func change_array(array [3]int) {    for i, _ := range array {        array[i] = 1    }    fmt.Printf("In function, array address is %p, value is %v\n", &array, array)}func main() {    var array [3]int    fmt.Printf("Original array address is %p, value is %v\n", &array, array)    change_array(array)    fmt.Printf("Changed array address is %p, value is %v\n", &array, array)}

執行結果:

Original array address is 0xc082006560, value is [0 0 0]In function, array address is 0xc0820065e0, value is [1 1 1]Changed array address is 0xc082006560, value is [0 0 0]

可以看到,在change_array函數中操作的數組地址並不是main函數中的數組地址,而main函數中的數組的值在調用change_array函數前後也沒有發生變化。

如果數組的元素類型是可比較的,那麼數群組類型就是可比較的,即可以使用“==”和“!=”運算子對數組進行運算。 請看下例:

package mainimport "fmt"func main()  {    a := [...]int{2, 1}    b := [...]int{1, 2}    fmt.Println(a == b, a != b)}

執行結果如下:

false true

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.