为了账号安全,请及时绑定邮箱和手机立即绑定

是否将结构初始化为指针

是否将结构初始化为指针

Go
拉丁的传说 2021-06-28 09:07:39
type Vertex struct {    X, Y float64}func main() {    v := Vertex{3, 4}    fmt.Println(v)    d := &Vertex{3, 4}    fmt.Println(d)}http://play.golang.org/p/XluyUHL2y7这两种初始化Vertex结构的方法有什么区别?我知道第二个是用指针分配,但在实践中我看不出这个解决方案有什么不同。
查看完整描述

2 回答

?
森栏

TA贡献1810条经验 获得超5个赞

在这两种情况下,顶点结构体以相同的方式初始化。

第一个表达式返回值,它是一个初始化的 Vertex 结构。使用 6g 的对齐规则,这意味着您将获得 8+8 = 16 个字节的 Vertex 结构,因为每个 float64 的大小为 8 个字节。第二个表达式分配内存,足够 8+8 = 16 个字节,将其用作 Vertex 结构,对其进行初始化并返回一个指针,该指针的大小为 4 或 8 个字节,具体取决于您的架构。

在实践中存在许多差异。这两个值的方法集,即 Vertex 结构体和 *Vertex 指针,可能不同。根据您需要传递 Vertex 结构的频率,传递指向它的指针可能会更有效,也可能不会更有效。如果您将 Vertex 结构传递给函数,该函数将获得一个副本,并且您的 Vertex 结构将永远不会被修改。如果您传递 *Vertex,则您的底层 Vertex 可能会更改。这可能是也可能不是您的意图:)


查看完整回答
反对 回复 2021-07-05
  • 2 回答
  • 0 关注
  • 207 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信