go 语法里变量前面增加&、*区别
在 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 main import "fmt" func main() { x := 10 // & 获取地址 ptr := &x fmt.Printf("x 的值: %d\n", x) // 输出: 10 fmt.Printf("x 的地址: %p\n", &x) // 输出: x 的内存地址 fmt.Printf("ptr 的值: %p\n", ptr) // 输出: x 的内存地址 fmt.Printf("ptr 的类型: %T\n", ptr) // 输出: *int // * 解引用 value := *ptr fmt.Printf("通过指针访问的值: %d\n", value) // 输出: 10 fmt.Printf("ptr 指向的值: %d\n", *ptr) // 输出: 10 // 修改指针指向的值 *ptr = 20 fmt.Printf("修改后 x 的值: %d\n", x) // 输出: 20 }
收藏文章数量从多到少与“把书读薄”是一个道理