变量是值的名字或代号,指针是变量的地址。每个变量都有自己的地址。
指针的本质是一个运算符(就像个函数一样),运算符的返回结果是内存地址。这个内存地址也可以赋值给一个指针类型的变量,如*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
这个方法可以直接创建一个特定类型的空指针。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/daguanjia11/article/details/121236130
内容来源于网络,如有侵权,请联系作者删除!