为什么 *int 与 go 中的 []int 不同

Gab*_*und -5 c++ memory arrays pointers go

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

gop*_*her 7

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

An*int只是一个指针,就像 C 中一样。因为 Go 没有指针算术(在unsafe包之外),所以 a*int不能像 C 中那样像数组一样使用。

  • 禁止指针运算的事实是 Go 需要切片之类的东西的一个(或一个)关键原因。C 的指针算术是 C 不具备的一个(或一个)关键原因,但经验证明,人们用指针算术搬起石头砸自己的脚。:-) (4认同)