它们显示了一个变量,该变量是指向结构文字的指针。为什么这不是默认行为?我对C不熟悉,所以很难理解它。我唯一能看到使用指针可能不是更有益的情况是结构文字是唯一的,并且不会用于其余程序,因此您希望尽快将其作为垃圾收集. 我什至不确定像 Go 这样的现代语言是否可以这样工作。
我的问题是这个。何时应将指向结构文字的指针分配给变量,何时应将结构文字本身分配?
谢谢。
在以下情况下使用指针而不是结构文字会很有帮助
在其他情况下,只需使用结构文字就可以了。int
对于一个小型结构,您可以像使用 an或 an一样考虑这个问题*int
:大多数时候 int 很好,但有时您传递一个指针,以便接收者可以修改您的 int 变量。
在您链接到的 Go tour 练习中,Vertex 结构很小,并且具有与任何数字大致相同的语义。在我看来,直接将它用作 struct 并像这样在#53Scaled
中定义函数会很好:
func (v Vertex) Scaled(f float64) Vertex {
v.X = v.X * f
v.Y = v.Y * f
return v
}
因为有
v2 := v1.Scaled(5)
会创建一个新的顶点,就像
var f2 float32 = f1 * 5
创建一个新的float
.
这类似于如何处理标准Time
结构(在此处定义),它通常保存在 typeTime
和 not的变量中*Time
。
但是没有明确的规则,根据用途,我很可能同时保留Scale
和Scaled
。
大多数时候你想要指针可能是对的,但我个人认为需要显式刷新指针。它使之成为int
和之间没有区别MyStruct
。他们的行为方式相同。
如果您将此与 C#(一种实现您所建议的语言)进行比较,我会发现它的语义令人困惑:
static void SomeFunction(Point p)
{
p.x = 1;
}
static void Main()
{
Point p = new Point();
SomeFunction(p);
// what is p.x?
}
取决于是否Point
定义为 aclass
或 a struct
。