首先我们从变量开始
什么是变量,变量是内存地址的名称。
定义一个变量,就是在内存中分配一个空间,空间内存有变量的值。
指针也是变量,指针变量也是内存地址的名称,指针的地址中存的是指针指向变量的地址。
### 两个运算符
& 取地址运算符,可以取得任何变量的地址
* 指针运算符,有两个作用
1. 用于变量定义
var p *int
该声明定义指针变量p ,p 是指向int 类型变量的指针。
2. 指针运算符
* p 作用是获得或改变指针p 指向变量的值
注意:不能获取改变空指针指向的值。
```go
package main
import "fmt"
func main() {
var a int = 10
// 输出a 的值
fmt.Printf("a =%d, a address = %p\n", a, &a)
var p *int = &a
// 输出p 的值16 进制显示
fmt.Printf("p = %#x\n", p)
// 输出p 变量的地址
fmt.Printf("p address = %p\n", &p)
// 输出p 指向的值
fmt.Printf("*p = %d\n", *p)
}
p 是指针,一种特殊的变量类型,p 的值是a变量的地址,
而变量p 的地址是0xc0000b2013,p 的值是0xc0000b2008
变量a 的地址 是0xc0000b2008 ,a 的值是 10
对指针p进行* 运算(* 是运算符)是取得p 指向变量a的值,也就是变量a的地址存储的值10。