指針這個(gè)東西统锤,不管是在哪個(gè)語言里毛俏,都算是比較難懂的概念,其實(shí)只要解釋清楚跪另,指針的概念并不難理解。
golang中打印地址的方法是:fmt.Printf("%p", x)煤搜,x表示要打印的數(shù)據(jù)結(jié)構(gòu)
package main
import "fmt"
func main() {
ss := []string{"a", "b", "c"}
//小張=你
fmt.Printf("數(shù)據(jù)地址=%p免绿,指針地址=%p\n", ss, &ss)
ss1 := ss
//張三=你
fmt.Printf("數(shù)據(jù)地址=%p,指針地址=%p\n", ss1, &ss1)
ss = []string{"d"}
//小張=另外一個(gè)同事
fmt.Printf("數(shù)據(jù)地址=%p擦盾,指針地址=%p\n", ss, &ss)
}
上述代碼的打印結(jié)果:
數(shù)據(jù)地址=0xc04203bd70嘲驾,指針地址=0xc04203e3c0
數(shù)據(jù)地址=0xc04203bd70,指針地址=0xc04203e440
數(shù)據(jù)地址=0xc0420381e0迹卢,指針地址=0xc04203e3c0
我們可以看到數(shù)據(jù)地址是一樣的辽故,但是變量本身的地址是不一樣的。這個(gè)怎么理解呢腐碱?從生活的角度來解釋可能比較容易:你在你的部門叫張三誊垢,也有人叫你小張,或者叫你小三症见,假定你是部門里唯一叫這些名字的喂走,那張三,小張谋作,小三都代表了你這個(gè)人芋肠。你這個(gè)人,就是我們上面說的數(shù)據(jù)地址遵蚜,張三帖池,小張奈惑,小三,都是指針變量睡汹,它們都指向你這個(gè)人肴甸。
指針指向是有可能變化的,例如部門里新來了一個(gè)姓張年齡比你小的同事張四帮孔,那么在你們部門中小張這個(gè)名字雷滋,指向就變成張四。
這里的假設(shè)有幾個(gè)前提:
- 限定在部門中文兢,也就是一臺(tái)主機(jī)晤斩。
- 一個(gè)名字,只能指向一個(gè)人姆坚。也就是指針需要指向具體的一個(gè)數(shù)據(jù)