Go 入门 - 指针

《学习Go语言》

Go有指针,然而没有指针运算。因此他们更像是引用。在Go中调用函数的时候,变量是值传递的,所以为了修改一个传递入函数的值的效率和可能性,有了指针。

所以如果这样写, *p++ ,表示(*p)++ :即,首先获取指针

func Set (t *T) {
    x = t
}
func Set (t T) {
    x = &t
}

指向的值,然后对这个值加一。

1. 根据上文内容,当像这样增加一个值的时候,什么类型可以工作?

仅能工作于指向数字的指针值。

2.为什么他不能工作在所有类型上?

++ 仅仅定义在数字类型,同事由于Go语言中没有运算符重载,所以在其他类型上会编译错误导致失败

———————————————————————————————————————————————————————

3. 假设定义了下面的结构

type Person struct {
    name string
    age int
}
  • 3.1下面两行之间的区别是什么
var p1 Person

p2 := new(Person)

第一行,var p1 Person 分配了Person的值给p1,p1的类型是Person

第二行: p2 := new (Person)分配了内存并且指针赋值给p2,p2的类型是 *Person

  • 3.2下面两个内存分配的区别是什么
func Set (t *T) {
    x = t
}
func Set (t T) {
    x = &t
}

第一个函数中,x指向了t指向的内容,也就是实际上的参数指向的内容

第二个函数中,x指向了一个新的(堆上分配)变量t,其包含了实际参数值的副本

因此,在第二个函数中,我们有了“额外”的变量存储相关值的副本

猜你喜欢

转载自blog.csdn.net/zhengwish/article/details/87691660