【发布时间】:2020-04-16 08:28:18
【问题描述】:
https://play.golang.org/p/DOhYaiH53Ek
我不理解*&p 操作,也不理解作为int() value NOT a memory address 的指针*p 如何能够修改其value 即valueX = valueY。我知道我一定是误解了某些东西,但这段代码从字面上看似乎是自相矛盾的。
//point
package main
import "reflect"
var pt int = 27
func main() {
println(reflect.TypeOf(pt))
println("pt = ", pt) //value of pt
println("&pt = ", &pt) //memory address of pt
updatePointer(&pt)
println("pt = ", pt) //value of pt
}
func updatePointer(p *int) { //requires memory address of an int
println("&p = ", &p) //memory address of p
println("p = ", p) //memory address of pt
println("*p before = ", *p) //value of pt
println(*p == 27) //true
*p = 14 //27 = 14??????????
println("*p =", *p) //value of pt
println(reflect.TypeOf(&pt) == reflect.TypeOf(*&p)) //true!!!?????
println("*&p = ", *&p) //memory address which p's memory address evals to???? 0x800 (p) -> 0x900 (pt) = 0x800 (p)?
}
/*
Why can't I do the following?
func updatePointer(p *int){
p = 14
//OR
&p = 14
//OR
*&p = 14
}
*/
【问题讨论】:
标签: pointers go variable-assignment assignment-operator