例1),声明一个指针变量,打印指针变量地址
package main
import "fmt"
var p *int
var d int
fmt.Println(p)
fmt.Println(d)
执行结果如下:
nil
0
【解释:由于指针变量未指向任何地址,所以打印值为 nil ,nil 相当于 java 中的(null
),python中的(None
),&p
取出指针变量的地址。上述代码int类型的指针变量和变量,根本区别,指针变量没有默认值,变量有默认值0】
问题?因为指针变量没有赋值,那么声明的指针变量是到底是指针变量自己的地址还是nil的地址呢?看下面 (例2)
例2),声明两个变量。代码如下:
func main() {
num := 1
var p *int
//fmt.Println(p)
//fmt.Println(*p)
p = &num
fmt.Println("num变量的地址为:", &num)
fmt.Println("num变量的地址为:", p)
fmt.Println("指针变量p的地址为:", &p)
fmt.Println("指针变量p的值为:", *p)
}
执行结果如下:
1 num变量的地址为: 0xc00000a0a8
2 num变量的地址为: 0xc00000a0a8
3 指针变量p的地址为: 0xc000006028
4 指针变量p的地址为: 1
解释:
&num
获取变量的地址
p = &num
获取变量的地址 给指针变量,所有 上述代码中的 p =&num
&p
获取指针变量的地址
*p
获取地址的值 p
是指针 *
获取指针所指向的地址的值
例2注销的代码,如果指针没有所指向的地址,则会运行时异常。