【问题标题】:Why is *int different from []int in go为什么 *int 与 go 中的 []int 不同
【发布时间】:2021-11-04 18:53:13
【问题描述】:

在开始学习 Go 之前,我曾与 CC++ 一起工作过一段时间,我很好奇为什么 *int[]int 在 golang 中被视为不同的类型。是否要将其视为数组取决于您,但它们都应该是指向内存中某个位置的指针,指示 int 类型列表的开头。该列表可能非常大,但我的观点是,为什么 []int*int 在 go 中不一样?

【问题讨论】:

标签: c++ arrays go pointers memory


【解决方案1】:

[]int 内部具有三个值:指向支持数组的指针、支持数组的长度和支持数组的容量。 Go 运行时确保应用程序确实在支持数组的边界之外进行索引。

*int 只是 C 中的指针。因为 Go 没有指针算法(在 unsafe 包之外),*int 不能像 C 中的数组一样使用。

【讨论】:

  • 禁止指针运算的事实是 Go 需要像 slice 这样的(或一个)关键原因。 C 的指针算术是(或一个)C 没有的关键原因——但经验证明人们用指针算术是在踢自己的脚。 :-)
  • "An []int 在内部具有三个值" 这是一个实现细节。
  • @Volker 规范规定切片具有关联的后备数组、长度和容量。您可以质疑“关联”是否意味着“指向”,但这是唯一明智的实现。
  • 这是唯一合理的实现,但它仍然是一个实现细节。
猜你喜欢
  • 2012-06-14
  • 1970-01-01
  • 2020-10-25
  • 2012-11-14
  • 1970-01-01
  • 2014-08-12
  • 2017-06-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多