go語言之陣列的深度理解

2021-10-08 21:15:15 字數 1460 閱讀 7144

陣列指標和指標陣列:

陣列指標:我們可以宣告乙個指標變數,指向乙個陣列

arr :=

int// 陣列指標

var ptr *

int=

&arr

// 簡寫

ptr :=

&arr

指標陣列:就是乙個陣列裡面存放的都是指標

x,y :=1,

2var arrptr =[5

]*int// 沒有手動初始化的元素,已經自動初始化指標型別對應的零值 nil

fmt.

println

(*arrptr[1]

)// 輸出:1

*arrptr[1]

=10

fmt.

println

(x,*arrptr[1]

)// 輸出:10 10

函式間傳遞陣列

傳遞陣列的副本:

函式之間傳遞變數時, 總是以值的方式傳遞的。如果變數是乙個陣列,意味著整個陣列,不管有多大,都會完整賦值乙份,並傳遞給函式。複製出來的陣列只是原陣列的乙份副本,在函式中修改傳遞進來陣列是不會改變原陣列的值。

func

modify

(a [5]

int)

func

main()

fmt.

println

(arr)

modify

(arr)

fmt.

println

(arr)

}//輸出:[0

0009

][01

009]

[000

09]

傳遞陣列的指標:

如果乙個陣列的資料量很大,如果還採用值傳遞的話,這無疑是乙個開銷很大的操作,對記憶體和效能都是不友好的。還好,我們還有乙個更好的辦法:傳遞指向陣列的指標,這樣只需要複製乙個陣列型別的指標大小就可以

func

modifyptr

(a *[5

]int

)func

main()

fmt.

println

(arr)

modifyptr

(&arr)

fmt.

println

(arr)

}//輸出:[0

0009

][02

009]

[020

09]因為現在傳遞的是陣列指標, 所以如果改變指標指向的值,

原陣列在記憶體的值也會被修改。這種操作雖然更有效地利用記憶體

(免去了大量的記憶體複製)、效能也更好

go語言之陣列

陣列是go語言程式設計中最常用的資料結構之一,陣列中的每個資料被稱為陣列元素,乙個陣列中元素的個數被稱為陣列的長度。陣列的宣告方法 var arr 32 int 宣告乙個長度為32的陣列,陣列中的元素為int var arr 12 int 宣告乙個長度為12的陣列,陣列中的元素為 int var a...

深度解密Go語言之unsafe

限制一 go的指標不能進行數 算。來看乙個簡單的例子 a 5p a p p a 3上面的 將不能通過編譯,會報編譯錯誤 invalid operation,也就是說不能對指標做數 算。限制二 不同型別的指標不能相互轉換。例如下面這個簡短的例子 func main 也會報編譯錯誤 cannot use...

深度解密Go語言之map

1 實現map最主要的資料結構有兩種 雜湊查詢表 hashtable 搜尋樹 searchtree go語言的map採用雜湊查詢表實現。2 雜湊查詢表一般會存在 碰撞 的問題。有兩種常用解決辦法 鍊錶法和開放位址法。go語言採用的是鍊錶法。3 自平衡搜尋樹法的最差搜尋效率是 o logn 而雜湊查詢...