GO中的`&` 和 `*`

&* 在 Go 语言中确实常常一起使用,并且它们的作用是互补的。虽然它们在用法上是相关的,但它们的功能是不同的:

  • & 符号:用于获取变量的地址,也就是指针。你可以把它理解为“取地址”操作。

    例如:

    p := &x  // 获取变量 x 的地址,并赋值给指针 p
    
  • * 符号:有两个主要作用:

    1. 在变量前使用时(解引用):获取指针指向的值。你可以把它理解为“取值”操作。

      例如:

      y := *p  // 获取指针 p 指向的变量的值,并赋值给 y
      
    2. 在类型前使用时:表示声明一个指向该类型的指针。

      例如:

      var p *int  // 声明一个指向 int 类型的指针 p
      

例子结合起来看

package main

import "fmt"

func main() {
    x := 42       // 普通变量 x
    p := &x       // 使用 & 符号获取 x 的地址(指针)
    fmt.Println(p)  // 打印 p,即 x 的地址

    y := *p       // 使用 * 符号解引用 p,获取指针 p 指向的值
    fmt.Println(y)  // 打印 y,即 x 的值(42)

    *p = 21       // 修改指针 p 指向的值,x 的值也会被修改
    fmt.Println(x)  // 打印 x,结果是 21
}

解释

  • p := &x:这里 &x 是取 x 的地址,然后将这个地址赋值给指针 p
  • y := *p:这里 *p 是解引用 p,获取 p 指向的 x 的值,然后将这个值赋给 y
  • *p = 21:这里 *p 是解引用 p,然后将新值 21 赋给 p 指向的变量,也就是 x

总结&* 常常配合使用。& 是用来获取地址的,* 是用来通过地址获取或设置值的。它们的确很像,但实际功能是互补的,配合使用可以在 Go 中灵活地处理指针和内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值