指針


1、簡單的定義一個指針

package?mainimport?"fmt"func?main(){var?p?*inti?:=2p?=?&ifmt.Println("memory?address?i:",p)
}
//執行結果:
memory?address?i:?0xc42000a2e0


2、打印指針的值

package?mainimport?"fmt"func?main(){var?p?*inti?:=2p?=?&ifmt.Println("memory?address?i:",p)fmt.Println(*p)
}
//執行結果:
memory?address?i:?0xc42000a2e0
2

3、指針賦值

package?mainimport?"fmt"func?main(){var?p?*inti?:=2p?=?&ifmt.Println("memory?address?i:",p)fmt.Println(*p)*p?=?3fmt.Println(*p)fmt.Println(i)
}
//執行結果:
memory?address?i:?0xc42000a2e0
2
3
3????//我們發現*p?和?i的值都變了,因為指針地址是一個。

4、指針值拷貝與指針值更改

package?mainimport?"fmt"func?changValue(x?int){x?=?20
}func?changValueNow(x?*int){*x?=?20
}func?main(){var?p?*inti?:=2p?=?&ifmt.Println("memory?address?i:",p)fmt.Println("memory?address?p:",&i)fmt.Println(*p)*p?=?3fmt.Println(*p)fmt.Println(i)changValue(i)fmt.Println("i?=",i)changValueNow(&i)fmt.Println("now?i:",i)
}
//執行結果:
memory?address?i:?0xc42000a2e0
memory?address?p:?0xc42000a2e0
2
3
3
i?=?3??????????//傳過去3,改為20,打印i還是3?說明這種只是值拷貝并沒更改本身
now?i:?20??????//傳過去一個指針地址,將地址值改為20,打印i是20,傳遞指針內存地址修改將改變指針的值。

5、指針申明

package?mainimport?"fmt"func?changValue(x?int){x?=?20
}func?changValueNow(x?*int){*x?=?20
}func?main(){var?p?*inti?:=2p?=?&ifmt.Println("memory?address?i:",p)fmt.Println("memory?address?p:",&i)fmt.Println(*p)*p?=?3fmt.Println(*p)fmt.Println(i)changValue(i)fmt.Println("i?=",i)changValueNow(&i)fmt.Println("now?i:",i)pj?:=?new(int)??//使用new?創建一個int型的指針changValueNow(pj)fmt.Println("pj?=?",*pj)
}
//執行結果:
memory?address?i:?0xc42000a2e0
memory?address?p:?0xc42000a2e0
2
3
3
i?=?3
now?i:?20
pj?=??20

6、golang中沒有指針的運算操作。