Go语言指针的解引用和间接引用

在 Go 语言中,"解引用"和"间接引用"是与指针相关的概念。

  1. 解引用 (Dereferencing):

解引用是指通过指针访问它所指向的变量的值。在 Go 中,使用星号(*)来解引用一个指针。

例如:

go 复制代码
var x int = 10
var p *int = &x  // p 是指向 x 的指针
fmt.Println(*p)  // 输出 10,这里的 *p 就是解引用
*p = 20          // 通过解引用修改 x 的值
fmt.Println(x)   // 输出 20
  1. 间接引用 (Indirect reference):

间接引用通常指通过指针间接地引用或访问某个值。这个概念与解引用密切相关,因为你正是通过解引用来进行间接引用的。

例如:

go 复制代码
type Person struct {
    Name string
    Age  int
}

var person Person = Person{"Alice", 30}
var ptr *Person = &person

fmt.Println(ptr.Name)  // 输出 "Alice",这是间接引用
// 上面的语句等同于 (*ptr).Name,但 Go 允许我们直接使用 ptr.Name

在这个例子中,ptr.Name 是一个间接引用,我们通过指针 ptr 间接地访问了 personName 字段。

  1. 多级指针:

Go 也支持多级指针,这时解引用和间接引用可能会变得更复杂:

go 复制代码
var x int = 10
var p *int = &x
var pp **int = &p

fmt.Println(**pp)  // 输出 10,这里进行了两次解引用
相关推荐
kirito学长-Java1 小时前
Java牙科诊所管理系统web医院病例挂号预约平台springboot/ssm代码编写
java·开发语言·spring boot
Evand J3 小时前
课题推荐——基于自适应滤波技术的多传感器融合在无人机组合导航中的应用研究
开发语言·算法·matlab·无人机
计算机-秋大田3 小时前
基于微信小程序的私家车位共享系统设计与实现(LW+源码+讲解)
java·vue.js·spring boot·后端·微信小程序·小程序·课程设计
RNGWGzZs3 小时前
Qt网络相关
开发语言·qt
一丝晨光4 小时前
如何构建ObjC语言编译环境?构建无比简洁的clang编译ObjC环境?Windows搭建Swift语言编译环境?
linux·c语言·开发语言·windows·macos·objective-c·clang
wn5314 小时前
【网站建设:HTTPS - 如何生成免费SSL证书,并自动更新】
后端·https·网站建设·ssl
喜欢猪猪4 小时前
基于 Java 开发的 MongoDB 企业级应用全解析
java·开发语言·mongodb
web2u5 小时前
如何安全地管理Spring Boot项目中的敏感配置信息
java·spring boot·后端·安全·spring·gitee·github
烛阴5 小时前
Go语言中如何优雅实现单例模式
后端·go