我再举个现实的例子吧。
Go 语言的 interface 类型,可以通过指针实现,也可以通过结构体实现。Go 语言是传值的,如果用结构体实现一个 interface,那么该 interface 类型变量的赋值(或者传参)就是对这个结构体深复制,也就是值语义的。但是,在 Go 的编译器具体实现中,interface 类型的变量就是保存结构体指针,使用时自动接引用(否则无法完成运行时多态)。
你看,在这种情况下,Go 的变量是值语义的(赋值进行值的深复制),但同时内部实现又是间接寻址的(需要通过类似虚表的结构访问方法)。这二者并不一致,有趣吧?
【 在 foliver 的大作中提到: 】
: 所有的函数,不管什么语言,都只传递值。需要理解直接寻址和间接寻址。否则只是半吊子理解。
: 就比如这个例子,函数内部写一个lst=[1]。外部调用传入一个变量vlist。你觉得调用后vlist会变么?
:
: ...................
--
修改:milksea FROM 114.249.196.*
FROM 114.249.196.*