关于链表和指针的一些疑问

CodeDonkey · · 564 次点击
你要这样理解指针。 你可以认为指针是一个整数,里面放着你的对象在内存的地址。 所以,当你需要改变你的对象的值的时候,就根据这个整数地址去访问你的对象。 (之下部分仅供理解,并不正确) 当你给函数传递值的时候,函数接受到的是一个复制出来的值,你改变复制出来的值并不会影响调用者。 当你给函数传递指针的时候,函数接受到的是一个复制出来的内存地址。你可以通过这个内存地址来访问调用者里的变量/对象,进行修改。但由于这个内存地址是复制出来的,所以你修改它,无法影响到调用者里的内存地址。 你现在需要修改的是调用者里指代的内存地址本身,所以你需要传入 这个内存地址的内存地址。
#4
更多评论
func insertHead(head **Student){ for i := 0; i < 10; i++ { stu := Student{ Name: "stu" + strconv.Itoa(i), Age: rand.Intn(100), Score: rand.Float32() * 100, } stu.next = *head *head = &stu } } https://play.golang.com/p/NroD32JgWVp
#1
你要改变的是指针本身,而不是指针指向的值,所以需要传入的是指针的指针
#2