请教一下for循环内部变量的处理机制,下面两份代码,第一份地址不会变,第二份就会变

ximen · · 1302 次点击
**看下面代码,或许对你有启发** ```go func main(){ var student Student println(&student) for i:=0;i<2;i++{ var stu Student println(&stu) stu.Key=strconv.Itoa(i) student=stu println(&student) } } ``` > 0xc420039f38 > 0xc420039f58 > 0xc420039f38 > 0xc420039f58 > 0xc420039f38 ```go func main(){ var student *Student println(&student) for i:=0;i<2;i++{ var stu Student println(&stu) stu.Key=strconv.Itoa(i) student=&stu println(student) } } ``` > 0xc420039f68 > 0xc42000a500 > 0xc42000a500 > 0xc42000a520 > 0xc42000a520
#9
更多评论
一个切片存的值,另一个存的指针(地址)啊
#1
第一个s在栈上分配的内存,然后拷贝过去 第二个s在堆上分配的内存 感觉是,没有验证,可以自己验证一下
#2