指针 *type
2022/1/9大约 1 分钟Go基本数据类型
指针 *type
指针指向某个特定数据类型的对象,比如以下这些都是指针:
- *int
- *[]int
- *map[string]string
- ...
指针必须绑定一个数据类型,所以不能说 * 就代表一个指针,*int 这才是一个完整的指针,同时表达了是指向 int 类型的指针,再例如 *string 是指向 string 类型的指针;就跟切片一样必须带数据类型一样: []int, []string, []map[string]string ...
指针本质上也是一种数据类型(而且是引用类型),它也可以“被指”,也就说有 **int ***int ****int...
指针可以指向任意变量,但是不能指向常量
- &变量名 返回 指针 (此时用 fmt.println 可视化,观测到的是一个内存地址 0x......)
- *指针 返回 变量的值
示例
package main
func main() {
a := '1'
p1 := &a // 指针实际的值即内存地址
println("address in memory: ", p1)
println("rune type value in memory: ", *p1) // 取内存地址存放的值,即为 '1' 这个 rune 的 ascii 码 即 49
b := "1"
p2 := &b
println("string type value in memory: ", *p2) // 结果就是 1,string 存的就是本来的数据
c := 1
p3 := &c
println(" int type value in memory: ", *p2) // 结果就是 1, int 存的就是本来的数据
}
注意
Go 的指针默认不支持运算,不像 C 放开了这个功能