首页 >后端开发 >Golang >Go 中的指针解引用如何工作,与 C/C 相比如何?

Go 中的指针解引用如何工作,与 C/C 相比如何?

Linda Hamilton
Linda Hamilton原创
2024-12-10 07:01:13141浏览

How Does Pointer Dereferencing Work in Go, and How Does It Compare to C/C  ?

理解 Go 中的指针解引用

指针解引用是 Go 中的基本操作,涉及访问指针变量指向的值。在问题中提到的示例中,指针用于操作自定义结构体 Vertex。

指针和结构

原始示例展示了 Vertex 实例的创建,包括使用指针对 Vertex 实例的引用。在修改后的示例中,发生以下情况:

t := *q
q.X = 4

第一行取消引用指针 q 并将其基础值分配给 t,从而有效地创建指向的顶点的副本。随后,修改 q.X 会更新原始 Vertex 实例,但不会影响 t,因为 t 保存该结构的单独副本。

避免使用指针带来意外

以确保更改通过指针所做的操作会反映在其他引用中,因此指针的使用应保持一致。在下面修改后的示例中,t 和 q 都指向相同的底层 Vertex:

t := q

通过此更改,q.X = 4 现在更新 t 和 q 访问的 Vertex 实例,从而产生预期的输出:

{1 2} &{4 2} {1 0} {0 0} &{4 2} {4 2} true

C/C 中的并行

与“极其奇怪的行为”的看法相反,当涉及指针时,C/C 表现出类似的行为。以下 C 代码演示了这一点:

Vertex v = Vertex{1, 2};
Vertex* q = &v;
Vertex t = *q;
q->x = 4;
std::cout << "*q: " << *q << "\n";
std::cout << " t: " << t << "\n";

输出类似于修改后的 Go 示例:

*q: { 4, 2 }
t: { 1, 2 }

因此,Go 中观察到的指针取消引用行为与指针的行为一致在其他编程语言中,例如 C/C 。

以上是Go 中的指针解引用如何工作,与 C/C 相比如何?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn