因为这一行:
p = &Test{4}
只需为
p变量分配一个新的指针值即可。在
f()函数内部,
p只是一个局部变量。通过向分配任何新值
p,您只是在更改局部变量的值,而 不是
指向的值。
中的
p局部变量
f()与中的
p局部变量无关
main()。如果你改变
p的
f(),它不会改变
p的
main()(这也不会改变尖结构值)。
在第二个示例中:
p.Value = 4
它是以下各项的简写:
(*p).Value = 4
这改变了 尖锐的 价值,因此你会时遵守变化
f()的回报。
注意:
顺便提一句,如果在
main()函数中将
p(地址为
main()指针的局部变量)的地址传递给function
f(),则可以修改存储在main的地址
p:
func f(p **Test) { *p = &Test{4}}
从中
main()调用,就像这样:
var i Test = Test{2}var p *Test = &if(&p)println(i.Value) // 2 - Note that 'i' won't change!println(p.Value) // 4 - only the address in 'p' to the new struct value created in f()
但是显然,传递单个指针
*Test并修改指针值(
p.Value = 4)更有效,更方便且更简洁。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)