变量是值的名字或代号,指针是变量的地址。每个变量都有自己的地址。

*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

这个方法可以直接创建一个特定类型的空指针。