一個指針變量指向了一個值的內(nèi)存地址轮纫。
var var_name *var-type
var ip *int /* 指向整型*/
var fp *float32 /* 指向浮點型 */
指針有3個概念: 指針地址物臂、指針類型和指針取值。
記住2個符號: &
取變量的內(nèi)存地址和*
取變量的內(nèi)存地址的值
x := 1
p := &x // p的類型為 *int, 指針指向 x
fmt.Println(*p) // "1"
*p = 2 // 更改p的值 x = 2
fmt.Println(x) // "2"
任何類型的指針的零值都是nil瓤介。如果p指向某個有效變量扭仁,那么p != nil
測試為真。指針之間也是可以進(jìn)行相等測試的展蒂,只有當(dāng)它們指向同一個變量或全部是nil時才相等又活。
var x, y int
fmt.Println(&x == &x, &x == &y, &x == nil) // "true false false"
練習(xí)
package main
import "fmt"
func main() {
a := 2
b := a
fmt.Println(a, b) // 2 2
b = 3
fmt.Println(a, b) // 2 3
a = 4
fmt.Println(a, b) // 4 3
// 指針
// &取內(nèi)存地址
// *取內(nèi)存地址的值
var c *int = &a
ptr := &a
fmt.Printf("%T %T %p %v\n", ptr, c, ptr, c)
fmt.Println(a) // 4
fmt.Println(*c) // 4
*c = 99
fmt.Println(a) // 99
var ptr1 *int
fmt.Printf("ptr1 指針的值為: %x\n", ptr1)
fmt.Printf("ptr1: %#v\n", ptr1)
if ptr1 != nil {
fmt.Println("ptr1 != nil")
} else {
fmt.Println("ptr1 == nil")
}
var pa int = 2 //聲明變量
var pb *int //聲明指針變量
pb = &pa //指針變量的存儲地址
fmt.Printf("a 變量的內(nèi)存地址: %x\n", pb)
fmt.Printf("b 變量的內(nèi)存地址: %x\n", pb)
fmt.Printf("b 變量的內(nèi)存地址的值: %d\n", *pb)
}