这是代码:
type ByteSlice []byte
func (p *ByteSlice) Append(data []byte) {
slice := *p
slice = append(slice, data...)
*p = slice
}
func main() {
x := ByteSlice{1, 2, 3}
y := []byte{4, 5}
x.Append(y)
fmt.Println(x)
}
好的,我理解指针为什么和如何工作,但我一直想知道为什么我们要使用*
运算符来传递指针到函数。
*ptr
是为了解引用指针并返回指针中保存的值。&var
返回变量var的地址。
为什么我们不使用&ByteSlice
来传递指向函数的指针呢?
我很困惑。难道这个函数不是在传递指针吗?
根据Go规范(http://golang.org/ref/spec#Pointer_types)
PointerType = "*" BaseType .
BaseType = Type .
这也让我困惑。为什么我们既要用星号(*
)运算符获取变量的指针,又要解引用指针?看起来在C和Go中我们都没有使用&
...
*
而不是&
源于 C 语言的原则,即声明语法遵循使用方式。 - Fred Foo