学习for循环的小问题,恳请老师指点一下

176840078@qq.com · 2016-04-03 04:35:40 · 1959 次点击

package main

import ( "fmt" )

func main() {

sum := 0
for i := 0; i < 10; i++ {
    sum += i
} //这行以上好理解,我能懂
list := []string{"aaa", "bbb", "ccc"} //请问1,这里list的值是切片么?好像不是数组。
for _, v := range list {              //请问2,这_,与range配合起到啥作用?这个程序好像是死循环啊
    fmt.Print("%s", v)
}

}

//我也是新手,回复下我的理解,如果错误多多指教

1:数组和切片的区别 数组是值类型,赋值和传参会复制整个数组,而不是指针。 数组长度必须是常量,且是类型的组成部分。[2]int 和 [3]int 是不同类型。 支持 "=="、"!=" 操作符,因为内存总是被初始化过的。 指针数组 [n]T,数组指针 [n]T。

    a := [2]int{1, 2} // 未初始化元素值为 0。
    b := [...]int{1, 2, 3, 4} // 通过初始化值确定数组长度。
    c := [5]int{2: 100, 4:200} // 使用索引号初始化元素。

slice 并不是数组或数组指针。它通过内部指针和相关属性引用数组片段,以实现变长方案

     引用类型。但自身是结构体,值拷贝传递。
     属性 len 表示可用元素数量,读写操作不能超过该限制。
     属性 cap 表示最大扩张容量,不能超出数组限制。
     如果 slice == nil,那么 len、cap 结果都等于 0。

     data := [...]int{0, 1, 2, 3, 4, 5, 6} 
     slice := data[1:4:5] // [low : high : max]

2:range 和 我的理解 匿名的K,在写for循环的时候,我记住这个是range的用法 key,value := range list

#2
更多评论

能排得整齐些吗?

  1. list是切片,字符串切片
  2. 与range配合,作用同上,就是循环。这是惯用法。for后面少了一个"_"(不含引号),还有fmt.print是不是少了个"f",应该是fmt.printf吧。
#1

可以把_看成黑洞 :smile:

#3