一、指针的定义
跟C语言一样,使用 * 定义指针:
var num int = 10var numPoint *int = &numfmt.Printf("num 的值: %d \n", num)fmt.Printf("num 的地址: %x \n", &num)fmt.Printf("numPoint 指向的地址: %x \n", numPoint)fmt.Printf("numPoint 指向的地址的值: %d \n", *numPoint)
打印出:
num 的值: 10
num 的地址: c0000140a0
numPoint 指向的地址: c0000140a0
numPoint 指向的地址的值: 10
如果定义一个指针却没给它赋值,此指针的值为 nil
var numPoint *int
fmt.Printf("%x \n", numPoint) // 0
fmt.Println(numPoint) // <nil>
由此,判断一个指针时候为空就应该这样写:
var numPoint *int
if numPoint != nil {
fmt.Println("numPoint != nil")
} else {
fmt.Println("numPoint is nil")
}
二、数组指针
数组指针是一个指向数组的指针:
arr := [...]int {1,2,3}
arrPoint := &arr
fmt.Println("arrPoint 的值:", arrPoint)
fmt.Println("arrPoint 的地址:", *arrPoint)
输出:
arrPoint 的值: &[1 2 3]
arrPoint 的地址: [1 2 3]
要取出数组指针中某一项指针指向的地址的值,需要添加括号后取出:
fmt.Println((*arrPoint)[0]) // 同arr[0]
fmt.Println((*arrPoint)[1]) // 同arr[1]
fmt.Println((*arrPoint)[2]) // 同arr[2]
要取出某项指针指向的地址,再在前面添加 & 符号:
fmt.Println(&(*arrPoint)[0]) // 同&arr[0]
fmt.Println(&(*arrPoint)[1]) // 同&arr[1]
fmt.Println(&(*arrPoint)[2]) // 同&arr[2]
三、指针数组
指针数组是一个包含若干指针的数组:
a, b, c := 1, 2, 3
pointArr := [...]*int {&a,&b,&c}
fmt.Println("pointArr:", pointArr)
fmt.Println("*pointArr[0]:", *pointArr[0])
fmt.Println("*pointArr[1]:", *pointArr[1])
fmt.Println("*pointArr[2]:", *pointArr[2])
输出:
pointArr: [0xc0000140a0 0xc0000140a8 0xc0000140b0]
*pointArr[0]: 1
*pointArr[1]: 2
*pointArr[2]: 3
