变量是值的名字或代号,指针是变量的地址。每个变量都有自己的地址。
*int
*
x := 1
p := &x // &取内存地址,p就是一个 *int 类型的指针变量
*p = 2 // *取内存地址指向的值
fmt.Println(x) // 结果为2
可以看出,借助指针,普通类型的变量也可以像引用类型那样来使用。
nilp != nilp
指针变量是可以比较的,指向同一地址为相等,都为nil也相等。两个指向不同内存地址的指针,即使内存地址中存放的值相等,结果两个指针依然不相等。
在函数中返回局部变量的指针是安全的,将指针传递给函数也是安全的,但通过*p都可以直接操作对应的值。所以,保护好指针和引用类型的变量。
new(T)T
p := new(int)
*p = 2
这个方法可以直接创建一个特定类型的空指针。