陣列指標和指標陣列:
陣列指標:我們可以宣告乙個指標變數,指向乙個陣列
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 而雜湊查詢...