說Go是C的進化版一點也不為過(至少我學到現在是這樣啦),處處充滿了C的影子,又加上了新的script語言的功能。
將變數直接指向記憶體位置就叫做Pointer,要修改內容就直接到該記憶體位置修改
package main
import "fmt"
func main() {
var p *int // 宣告p是一個int的指標,但此時他要指向哪還不知道
a := 10 // a佔用了一個記憶體空間
p = &a // 將p指到a的記憶體位置
fmt.Println(p) // p所指到的記憶體位置
fmt.Println(*p) // *代表顯示該記憶體位置的值
}
有了Pointer的概念,就比較好理解function是怎麼傳值的
package main
import "fmt"
func foo(x int) {
fmt.Println(&x) // function內x的記憶體位置
}
func main() {
a := 10
fmt.Println(&a) // main裡面a的記憶體位置
foo(a)
}
結果會看到兩個記憶體位置是不一樣的。代表在function傳值過去後,function複製該值到另一個空間來操作,對於雲本main裡面的值是不會影響的
當然,想要在傳指標到function內操作也是可以的
package main
import "fmt"
func foo(x *int) {
fmt.Println(x) // function內x的記憶體位置
}
func main() {
a := 10
fmt.Println(&a) // main裡面a的記憶體位置
foo(&a)
}
可以看到傳指標過去後,兩邊操作的是同一個東西
下回預告:資料結構-Array