golang的指针

x33g5p2x  于2021-11-09 转载在 Go  
字(0.5k)|赞(0)|评价(0)|浏览(367)

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

指针的本质是一个运算符(就像个函数一样),运算符的返回结果是内存地址。这个内存地址也可以赋值给一个指针类型的变量,如*int

对于指针类型的变量,有一个专属的操作符(*),返回值是某内存地址处存放的值。

x := 1
p := &x 		// &取内存地址,p就是一个 *int 类型的指针变量
*p = 2	 	// *取内存地址指向的值
fmt.Println(x) 	// 结果为2

可以看出,借助指针,普通类型的变量也可以像引用类型那样来使用。

指针变量(如上面代码的p)的空值是 nil,如果p != nil 为true,则说明 p指向一个内存地址。

指针变量是可以比较的,指向同一地址为相等,都为nil也相等。两个指向不同内存地址的指针,即使内存地址中存放的值相等,结果两个指针依然不相等。

在函数中返回局部变量的指针是安全的,将指针传递给函数也是安全的,但通过*p都可以直接操作对应的值。所以,保护好指针和引用类型的变量。

new(T)函数(对,它是一个函数,而不是关键字)创建一个T类型的变量,并返回其内存地址。

p := new(int)
*p = 2

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

相关文章

微信公众号

最新文章

更多