Go 沒有指標運算
C/C++這些語言支援指標運算。可以遞增/遞減指標來移動到下一個/上一個記憶體位址,可以對指標增加或減去一個整數值,你也可以使用關係運算子 ==
、<
、>
等比較兩個指標。
但是Go任何此類運算都會導致編譯時期錯誤。
var p *int
+//指標只能儲存 int 變數的記憶體位址
var p *string
- fmt.Println("p = ", p, "&=", &p) //p = <nil> 指標的零值為 nil ,不可以印*p=nil
+ person := new(string) //用new拿到宣告指標,初始值根據type
fmt.Println("person:", person, "*=", *person, "&=", &person)
*person = "11"
+ // & 運算子取得變數的位址
+ // * 運算子來存取儲存在指標所指向的變數中的值
fmt.Println("person:", person, "*=", *person, "&=", &person)
- person2 := "string" //非指標
fmt.Println("person2:", person2, "&=", &person2)
- //fmt.Println("person:%v", *person2) //cannot indirect person2
+ person = &person2 //指標是一個變數,可以用來儲存另一個變數的記憶體位址
fmt.Println("person:", person, *person, &person)
+ //如果是指標字串內容比對記得用*比對