初级会员
  • 第 20046 位会员
  • wxb
  • 小勃
  • 2018-07-06 18:04:09
  • Offline
  • 19 36

最近发布的主题

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • > 可以看出来map和slice都是指针传递,即函数内部是可以改变参数的值的 函数内部是否可以改变slice参数值,是要看有没有发送内存的重新分配;容量够会影响,容量不够申请新的内存 并拷贝原内存值,此时就跟原来的参数没关系了
  • for + time.After了解一下
  • 看到标题以为要打破我认知边界,进来一看没想到....
  • make 还能分配array
  • ```go package main import "fmt" func swap(newA, newB *int) (*int, *int) { // 这里的newA执行的是调用中传递进来的变量地址,也就是说main中传递尽量的变量a得的地址(&a)被复制保存到了这个newA变量,newB同理 fmt.Printf("a2: %v %p\n", *newA, newA) // 所以这里输出的和main输出保持一致;是:a2: 3 0xc0000120b8 // 这一步将newA和newB执行的内存地址做了交互;也就是说newA和newB变量的指向做了变更 newA, newB = newB, newA // 此时打印newA时,其实打印的是调用者最初传递进来的newB执行内存地址的值和地址 fmt.Printf("a3: %v %p\n", *newA, newA) return newA, newB } func main() { a := 3 b := 4 // 这一步不用解释 fmt.Printf("a1: %v %p\n", a, &a) // c指向的是b内存地址;d指向的是a内存地址 c, d := swap(&a, &b) // 这里a的内存地址没变,所以值也不变。记住上面swap(&a, &b)调用时,是将&a, &b的内存地址传给了swap函数的形参newA和newB;swap内部交互newA和newB变量的内存指向,并不会影响这里a和b的指向(也就是一楼说的“此a,b非彼a,b”);但是如果swap中修改newA或者newB指向内存地址中的值,就会影响这里a和b的值 fmt.Printf("a4: %v %p\n", a, &a) fmt.Println(*c, *d) } ``` 稍微做个修改,楼主可能会清晰点