在 Go 语言中,& 和 * 是与指针相关的两个重要操作符,它们的作用如下:
简单理解:
- a为变量,&a获取指针地址
- a为指针,*a获取值
& 操作符
- 作用:获取变量的内存地址(取地址操作符)
- 用法:&variable 返回该变量的指针(即指向该变量的地址)
var x int = 10 ptr := &x // ptr 是一个指向 x 的指针
* 操作符
作为指针声明
- 作用:声明指针类型
- 用法:*Type 表示指向 Type 类型的指针
var ptr *int // 声明一个指向 int 的指针
作为解引用操作符
- 作用:获取指针指向的值(解引用操作符)
- 用法:*pointer 返回指针指向的值
var x int = 10 var ptr *int = &x value := *ptr // value = 10,获取 ptr 指向的值
示例对比
package mainimport "fmt"func main() {x := 10// & 获取地址ptr := &xfmt.Printf("x 的值: %d\n", x) // 输出: 10fmt.Printf("x 的地址: %p\n", &x) // 输出: x 的内存地址fmt.Printf("ptr 的值: %p\n", ptr) // 输出: x 的内存地址fmt.Printf("ptr 的类型: %T\n", ptr) // 输出: *int// * 解引用value := *ptrfmt.Printf("通过指针访问的值: %d\n", value) // 输出: 10fmt.Printf("ptr 指向的值: %d\n", *ptr) // 输出: 10// 修改指针指向的值*ptr = 20fmt.Printf("修改后 x 的值: %d\n", x) // 输出: 20 }