2 回答
TA贡献1946条经验 获得超3个赞
请参阅规范中的选择器部分:
选择器会自动取消引用指向结构的指针。If
x
是指向结构的指针,x.y
是(*x).y
; 的简写。如果该字段y
也是指向结构的指针,x.y.z
则是 的简写(*(*x).y).z
,依此类推。Ifx
包含类型为 的匿名字段*A
, whereA
也是结构类型,x.f
是 的简写(*x.A).f
。
总之:结构的指针成员会自动取消引用。
对于赋值没有这样的快捷方式,所以赋值指针与在 C 中相同:
*p = value
对于 structx
的成员y
是指针的情况,您希望为其目标分配一个值:
*x.y = value
如果x
是指向结构的指针,则上面的表达式转换为
*((*x).y) = value
TA贡献1848条经验 获得超6个赞
new创建一个指针。如果你想给指针指向的东西赋值,你需要取消引用它。如果您没有使用 new 创建值,则不需要取消引用任何指针:
//without magic := so you actually see the types of things
package main
import "fmt"
func main(){
var s string = "Hello World"
s = "hello"
var sp (*string) = &s
fmt.Println(s) //hello
fmt.Println(*sp) //hello
*sp = "world"
fmt.Println(s) //world
fmt.Println(*sp) //world
}
您不需要取消对您的测试 chk 的引用,因为根据您是在结构上使用它还是在指向结构的指针上使用它,它的.行为可以像C->和.C一样。
- 2 回答
- 0 关注
- 218 浏览
添加回答
举报