探索 & 和 * 指针的用法和区别
在使用 Go 函数时,遇到与将变量作为参数传递相关的错误是很正常的常见的。使用由 & 或 * 表示的指针通常可以解决这些问题。然而,了解它们的差异和正确的用法至关重要。
定义和用法
& 运算符返回变量的内存地址,而 * 用于取消引用变量指针。在您的示例中,您将 u 定义为 User 类型,但不是指向 User 的指针。因此,您需要使用 &u,因为 json 包中的 Decode 函数需要一个地址或指针。
如果 u 最初是使用 u := new(User) 或 var u *User 创建为指针,则& 在对 Decode 的调用中将变得不必要。
类比和示例
思考指针作为存储地址的变量。与我们通过地址找到家类似,指针可以帮助检索存储在特定内存位置的数据。
假设您有一个代表内存中地址的变量 x。当您键入 &x 时,您实际上获得了 x 本身的地址。但是,如果您键入 *x,您将重定向到存储在 x 中的内存位置并检索那里的实际数据。
例如,如果您有一个保存值 10 的变量 y 并且您创建了一个指向它的指针,pointerToY,pointerToY 将存储 y 的地址。
现在,&y 将为您提供 y 的地址,而 &pointerToY 将提供 y 的地址指针本身。
指针的乐趣
这里有一个程序来进一步说明这些概念:
这个程序演示了以下情况下的不同结果:使用指针和取消引用。它说明了如何通过指针重定向来访问数据以及双重取消引用最终如何返回原始数据值。
以上是Go 中'&”和'*”指针有什么区别,什么时候应该使用它们?的详细内容。更多信息请关注PHP中文网其他相关文章!