《学习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,其包含了实际参数值的副本
因此,在第二个函数中,我们有了“额外”的变量存储相关值的副本