問題:下面這段**輸出
func main()
m := make(map[int]*int)
for key,val := range slice
for k,v := range m
}//結果
0 -> 3
1 -> 3
2 -> 3
3 -> 3
參考解析:這是新手常會犯的錯誤寫法,for range 迴圈的時候會建立每個元素的副本,而不是元素的引用,所以 m[key] = &val 取的都是變數 val 的位址,所以最後 map 中的所有元素的值都是變數 val 的位址,因為最後 val 被賦值為3,所有輸出都是3
正確寫法:
func main()
m := make(map[int]*int)
for key,val := range slice
for k,v := range m
}//結果
0 -> 0
1 -> 1
2 -> 2
3 -> 3
golang開發筆記No 5
下面這段 能否編譯通過?如果可以,輸出什麼?package main import fmt const x iota y z zz k p iota func main 結果 0 2 zz zz 5 解析 iota是golang語言的常量計數器,只能在常量的表示式中使用。iota在const關鍵字出...
golang開發筆記No 6
關於channel,下面語法正確的是 下面這段 輸出什麼?package main import fmt type person struct func main fmt.println m p 參 及解析 0,列印乙個 map 中不存在的值時,返回元素型別的零值。這個例子中,m 的型別是 map ...
qt開發筆記1
qmainwindow繼承與qwidget 當qwidget 類中介面發生變化 例如 最大 小化 時,觸發showevent 函式。類似函式還有changeevent keypressevent paintevent resizeevent 等等。qeventloop類 在任何時候,你都可以建立乙個...