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,这里进行了两次解引用
相关推荐
lly2024062 分钟前
网站主机提供商:如何选择最适合您的服务
开发语言
HAPPY酷3 分钟前
构建即自由:一份为创造者设计的 Windows C++ 自动化构建指南
开发语言·c++·ide·windows·python·策略模式·visual studio
工一木子3 分钟前
Java 的前世今生:从 Oak 到现代企业级语言
java·开发语言
啟明起鸣6 分钟前
【C++20新特性】概念约束特性与 “模板线程池”,概念约束是为了 “把握未知对象”
开发语言·c++·c++20·模板线程池
老蒋每日coding20 分钟前
LangGraph:从入门到Multi-Agent超级智能体系统进阶开发
开发语言·python
郁闷的网纹蟒29 分钟前
虚幻5---第12部分---蒙太奇
开发语言·c++·ue5·游戏引擎·虚幻
小旭952731 分钟前
Java 反射详解
java·开发语言·jvm·面试·intellij-idea
雨季66632 分钟前
Flutter 三端应用实战:OpenHarmony “极简文本行数统计器”
开发语言·前端·flutter·ui·交互
有来技术40 分钟前
ASP.NET Core 权限管理系统(RBAC)设计与实现|vue3-element-admin .NET 后端
vue.js·后端·c#·asp.net·.net
m0_7482331740 分钟前
PHP版本演进:从7.x到8.x全解析
java·开发语言·php