10-Go語言數(shù)組和切片

Go語言數(shù)組數(shù)組

一維數(shù)組
  • 數(shù)組定義格式: var arr [3]int
  • 數(shù)組的初始化方式
    • 先定義后初始化
      注意點(diǎn):Go語言數(shù)組支持先定義后一次性初始化
    //1.先定義后初始化
          var nums [3]int
          //先定義數(shù)組再逐個(gè)初始化
          nums[0] = 1
          nums[1] = 2
          nums[2] = 3
    
          //先定義數(shù)組再一次性初始化
          nums = [3]int{2,3,4}
          fmt.Println(nums)
    
    • 定義的同時(shí)初始化
      • 注意點(diǎn):給數(shù)組一次性賦值的時(shí)候一定要在值的前面加上數(shù)組的類型,而且必須要和數(shù)據(jù)類型一模一樣
      • C語言中數(shù)組沒有初始化保存的是垃圾數(shù)據(jù),Go語言中數(shù)組沒有初始化保存的是零值
    //var arr [3]int = [3]int{2, 3, 4}
      //定義的同時(shí)部分初始化,未初始話的元素為0
      var arr [3]int = [3]int{1,3}
      //指定元素初始化
      var arr [3]int = [3]int{2:4}
      //[...]的含義, 讓編譯器根據(jù)賦值的元素個(gè)數(shù)自動計(jì)算數(shù)組的元素個(gè)數(shù)
      arr := [...]int{1,3,4}
      fmt.Println(arr)
      fmt.Println(arr[0])
      fmt.Println(arr[1])
      fmt.Println(arr[2])
    

零值
  • 什么是零值
    • 數(shù)據(jù)類型未初始化,系統(tǒng)自動添加的數(shù)據(jù)
    • 各種數(shù)據(jù)類型零值
      • int/int8/int16/int32/int64/uint/uint8/uint16/uint32/uint64/byte/rune/uintptr的默認(rèn)值是0
      • float32/float64的默認(rèn)值是0.0
      • bool的默認(rèn)值是false
      • string的默認(rèn)值是""
      • pointer/function/interface/slice/channel/map/error的默認(rèn)值是nil

值類型
  • Go語言在數(shù)組中是值類型,所以數(shù)組之間的賦值是值拷貝關(guān)系,而不是指向關(guān)系
  • 如果想讓兩個(gè)數(shù)組可以相互賦值, 那么兩個(gè)數(shù)組的類型必須一致類型一致包括元素個(gè)數(shù), 元素個(gè)數(shù)也是Go語言中數(shù)組類型的一部分
  • 如果數(shù)組中存儲的元素類型支持== != 操作,而且兩個(gè)數(shù)組的類型是一個(gè)樣的, 那么數(shù)組也支持== !=操作
package main

import "fmt"

func main() {
    nums := [...]int {2,3,4}
    arr := [...]int{2,3,4}
    fmt.Println(nums == arr) //true

    nums := [3]int{1,2,3}
    res := nums
    fmt.Println(res) //[1,2,3]

    nums := [3]int{1,2,3}
    change(nums)
    fmt.Println(nums)  //[1,2,3]

}
//函數(shù)內(nèi)部無法改變數(shù)組元素的值
func change(nums [3]int)  {
    nums[2] = 666
}

二維數(shù)組
  • Go語言二維數(shù)組格式: var 數(shù)組名稱[一維數(shù)組個(gè)數(shù)][一維數(shù)組元素個(gè)數(shù)]數(shù)組類型
package main

func main() {
    //定義二維數(shù)組格式
    var nums [2][3]int = [2][3]int{
        {1,3,5},
        {2,5,6},
    }

    //簡單定義方法
    nums := [2][3]int{
        {1,2,3},
        {4,5,6},
    }

    arr := [...][3]int{
        {12,3,5},
        {1,2,6},
    }
    fmt.Println(arr)
   //二維數(shù)組也可以省略元素個(gè)數(shù),但是只可以省略行數(shù),不可以省略列數(shù)
    arr := [...][3]int{
        {12,3,5},
        {1,2,6},
    }

    //遍歷二維數(shù)組
    for i:=0; i< 2; i++{
        for j:=0;j < 3 ;j++  {
            fmt.Println(arr[i][j])
        }
    }
}

數(shù)組的遍歷
  • Go語言數(shù)組遍歷兩種方法
    • 普通for循環(huán)遍歷
    nums := [...]int{2, 3, 5, 1, 3, 6}
      //普通for循環(huán)遍歷
      for i := 0; i < 6; i++ {
          fmt.Println("index= ", i, "value = ", nums[i])
      }
    
    • for..range遍歷
    nums := [...]int{2, 3, 5, 1, 3, 6}
      //高級for循環(huán)遍歷
      for key,value := range nums{
          fmt.Println(key,"-->",value)
      }
    

Go語言切片

切片
  • 什么是切片

    • 在Go語言中,數(shù)組的長度一旦確定就無法改變,為了解決這一問題,推出了一種數(shù)據(jù)類型切片
    • 切片簡單理解就是一個(gè)可變長度的數(shù)組,底層的實(shí)現(xiàn)原理就是一個(gè)結(jié)構(gòu)體, 結(jié)構(gòu)體中有一個(gè)指針指向了一個(gè)數(shù)組
      本質(zhì)上所有的數(shù)據(jù)都是保存在指向的數(shù)組中的
  • 創(chuàng)建切片

    • 通過數(shù)組創(chuàng)建切片1
      通過數(shù)組來創(chuàng)建
      格式: [起始位置:結(jié)束位置], 從起始位置開始截取, 直到結(jié)束位置, 但是不包括結(jié)束位置
      注意:  截取了多少個(gè)元素, len就等于幾
             容量等于數(shù)組的長度 - 起始位置
      nums := [5]int{1,2,3,4,5}
      //1.通過數(shù)組創(chuàng)建切片
      //1.1[起始位置 : 結(jié)束位置] 從起始位置開始截取,直到結(jié)束位置,但是不包括結(jié)束位置索引對應(yīng)的元素
      var sce []int = nums[2 : 4]
    
      //1.2[: 結(jié)束位置]只指定結(jié)束位置,不指定起始位置,就是從開始位置截取直到指定的位置,但是也不包括指定位置的元素
      var sce []int = nums[:3]
    
      //1.3[起始位置 : ] 從起始位置開始截取,直到末尾
      var sce []int = nums[0:]
    
      //1.4[: ]只有一個(gè):,從開始位置截取,直到末尾結(jié)束
      var sce []int = nums[:]
      fmt.Println(sce)
      //計(jì)算切片的長度len當(dāng)前保存的數(shù)據(jù)個(gè)數(shù)
      fmt.Println(len(sce))
      //計(jì)算切片的容量cap總共能夠保存數(shù)據(jù)的個(gè)數(shù)
      fmt.Println(cap(sce))
    
    
    • 通過數(shù)組創(chuàng)建切片2
      切片的第三個(gè)參數(shù)max,不能小于第二個(gè)參數(shù),作用是用來控制切片容量的
      //如果指定了第三個(gè)參數(shù), 那么切片的容量就等于 第三個(gè)參數(shù) - 第一個(gè)參數(shù)
      //注意點(diǎn): 如果沒有指定第三個(gè)參數(shù),那么切片的容量 = 數(shù)組的容量 - 第一個(gè)參數(shù)值
      //        如果指定了第三個(gè)參數(shù),那么切片的容量 = 第三個(gè)參數(shù) - 第一個(gè)參數(shù)值
      arr := [7]int{1,2,3,4,5,6,7}
      sce := arr[1:4:4]
      fmt.Println(sce)
      fmt.Println(len(sce))
      fmt.Println(cap(sce))
    
    • 通過make()函數(shù)創(chuàng)建切片
     // 2.通過make函數(shù)創(chuàng)建切片
      // 第一個(gè)參數(shù): 告訴系統(tǒng)要存儲什么類型的數(shù)據(jù)
      // 注意點(diǎn): 如果是創(chuàng)建切片一定要在傳入的數(shù)據(jù)類型前面寫上[]
      // 第二個(gè)參數(shù): 告訴系統(tǒng)創(chuàng)建出來的切片len等于多少
      // 第三個(gè)參數(shù): 告訴系統(tǒng)創(chuàng)建出來的切片cap等于多少
      // 注意點(diǎn): 第三個(gè)參數(shù)可以省略, 如果省略切片的容量就等于切片的長度(等于第二個(gè)參數(shù))
      //var sce []int = make([]int, 2, 5)
      var sce []int = make([]int, 2)
      fmt.Println(sce)
      fmt.Println(len(sce))
      fmt.Println(cap(sce))
    
    • 通過語法糖創(chuàng)建切片
      // 3.通過Go提供的語法糖來創(chuàng)建
      // 一定要注意[]里面沒有值就是切片
      // 通過Go提供的語法糖來創(chuàng)建len等于cap
      var sce []int = []int{1, 3, 5} // 相當(dāng)于make([]int, 3)
      fmt.Println(sce)
      fmt.Println(len(sce))
      fmt.Println(cap(sce))
    

切片與數(shù)組
  • [ ]沒有數(shù)字就是切片,有數(shù)字就是數(shù)組,[...]這種定義格式是數(shù)組
  //定義數(shù)組
    var arr [5]int = [5]int{1,3,4,5,6}
    var arr = [5]int{1,3,4,5,6}
    arr := [5]int{1,3,4,5,6}
    arr := [...]int{1,3,4,5,6}
//定義二維數(shù)組
    var arrs [2][3]int = [2][3]int{
        {1,3,5},
        {2,4,6},
    }
    var arrs = [2][3]int{
        {1,3,5},
        {2,4,6},
    }

    arrs := [2][3]int{
        {1,3,5},
        {2,4,6},
    }

    arrs := [...][3]int{
        {1,3,5},
        {2,4,6},
    }
  //定義切片
    var sce []int = []int{1,3,5}
    var sce = []int{1,3,5}
    sce := []int{1,3,5}
//定義一個(gè)切片,切片中保存的是數(shù)組
    var sec [][3]int = [][3]int{
        {1, 3, 5},
        {2, 4, 6},
    }

    var sec = [][3]int{
        {1, 3, 5},
        {2, 4, 6},
    }

    sec := [][3]int{
        {1, 3, 5},
        {2, 4, 6},
    }
//定義一個(gè)切片,切片中保存切片
    var sec[][]int = [][]int {
        {1, 3, 5},
        {2, 4, 6},
    }

    var sec = [][]int {
        {1, 3, 5},
        {2, 4, 6},
    }
    sec := [][]int {
        {1, 3, 5},
        {2, 4, 6},
    }

append函數(shù)
  • append函數(shù)格式 :append(切片,數(shù)據(jù))
  • append函數(shù)作用: 追加切片中的數(shù)據(jù)
  • append函數(shù)注意點(diǎn)
    • 如果通過append函數(shù)追加數(shù)據(jù)之后超過了原有的容量, 那么系統(tǒng)內(nèi)部會自動按照當(dāng)前容量*2的方式重新定義一個(gè)數(shù)組作為切片保存數(shù)據(jù)的模型
    • 在擴(kuò)容的時(shí)候會重新定義一個(gè)新的切片, 所以需要返回一個(gè)切片
    • 擴(kuò)容問題
      • 容量小于1024的時(shí)候擴(kuò)容, 會按照原有容量的2倍擴(kuò)容
      • 容量大于1024的時(shí)候擴(kuò)容,會按照原有的1/4進(jìn)行擴(kuò)容
    sec := make([]int, 1024, 1024)
    sec = append(sec, 6)
    fmt.Println(len(sec))
    fmt.Println(cap(sec))//1280

切片的使用
  • 定義切片
sec := []int{1,3,5,7,9,11}
  • 修改切片中的數(shù)據(jù)
sec[2] = 666
  • 增加切片中的數(shù)據(jù)
sec = append(sec, 7)
fmt.Println(sec)
  • 刪除切片中指定的數(shù)據(jù)
//5.刪除切片中的指定索引對應(yīng)的數(shù)據(jù)
    index := 3
    //不僅可以利用數(shù)組獲取切片,還可以用切片獲取切片
    //sec = sec[:index]
    //fmt.Println(sec) //[1 3 5]
    //sec = sec[index +1 :]
    //fmt.Println(sec) //[9 11]
    //將第二個(gè)切片追加到第一個(gè)切片后面即可
    sec = append(sec[:index], sec[index +1 :]...)
    fmt.Println(sec) //[1 3 5 9 11]

切片的內(nèi)存地址
package main

import "fmt"

func main() {
    /*
    通過切片生成切片的注意點(diǎn)
    */

    //1.創(chuàng)建一個(gè)數(shù)組
    var arr  = [3]int{1,2,3}
    //Go語言中不能通過數(shù)組名稱獲取數(shù)組的地址
    //fmt.Printf("%p\n", arr)
    fmt.Printf("%p\n", &arr) //0xc0420500a0
    fmt.Printf("%p\n", &arr[0]) //0xc0420500a0

    //2.通過數(shù)組創(chuàng)建一個(gè)切片
    //直接打印sce打印的是sce中指針保存的地址,也就是底層指向的那個(gè)數(shù)組的地址
    sce := arr[:]
    fmt.Printf("%p\n", sce) //0xc0420500a0

    //3.通過切片創(chuàng)建切片
    //通過切片創(chuàng)建一個(gè)切片, 新的切片和老的切片底層指向同一個(gè)數(shù)組
    sce2 := sce[:]
    fmt.Printf("%p\n", sce2) //0xc0420500a0

    //修改數(shù)組中的值
    arr[2] = 666
    sce[2] = 666
    sce2[2] = 666
    fmt.Println(arr)
    fmt.Println(sce)
    fmt.Println(sce2)
}
copy函數(shù)
package main

import "fmt"

func main() {
    /*
    copy函數(shù)的作用是將源切片的值拷貝到目標(biāo)切片當(dāng)中
    函數(shù)格式 copy(目標(biāo)切片, 源切片)

     */
    sec1 := []int{1, 2, 3, 6, 9, 10}
    sec2 := make([]int, 2, 5)
    fmt.Println(sec2)
    //將源切片的值拷貝到目標(biāo)切片當(dāng)中
    //注意點(diǎn): 拷貝的時(shí)候是以目標(biāo)切片為準(zhǔn),目標(biāo)切片中長度為多少將來只能拷貝多少個(gè)值進(jìn)來
    copy(sec2, sec1)
    fmt.Println(sec2)
}

切片與字符串

注意點(diǎn): 切片和數(shù)組不同, 切片不支持== !=操作

package main

import "fmt"

func main() {
    /*
    1.切片可以再生成新的切片, 兩個(gè)切片底層指向同一個(gè)數(shù)組
    2.切片和數(shù)組不同, 切片不支持== !=操作
    3.在Go語言中字符串的底層實(shí)現(xiàn)就是切片, 所以可以通過字符串來生成切片
    */

    //數(shù)組可以使用== !=操作
    //arr := [3]int{1,2,3}
    //arr2 := [3]int{4,5,6}
    //arr = arr2
    //fmt.Println(arr)


    var str string = "www.it666.com"
    sec := make([]byte, len(str))
    copy(sec,str)
    fmt.Println(len(str))
    fmt.Printf("%s\n",sec) //www.it666.com
}
切片與數(shù)組注意點(diǎn)
  • 數(shù)組定義后不初始化,可以使用,切片定義后可以一次性初始化,但是不能逐個(gè)初始化,但是可以使用append函數(shù)添加數(shù)據(jù)
  • 數(shù)組定義后直接使用
var arr [4]int
    //數(shù)組定義后可以直接使用
    arr[0] = 1
    arr[1] = 3
    arr[2] = 5
    arr[3] = 7

    fmt.Println(arr)
  • 切片定義后不能直接使用
    var sce []int
    //不能逐個(gè)初始化,會報(bào)錯
    //sce[0] = 1
    //sce[1] = 3
    //sce[2] = 5

    //可以使用append函數(shù)添加數(shù)據(jù)
    sce = append(sce,1)
    sce = append(sce,3)
    sce = append(sce,5)
    sce = append(sce,7)
    sce = append(sce,9)

    //打印切片
    fmt.Println(sce)
    fmt.Println(len(sce))
    fmt.Println(cap(sce))
  • 計(jì)算數(shù)組的長度方式
    //計(jì)算數(shù)組長度的方式
    //第一種方式(推薦)使用len函數(shù)
    arr := [4]int{1,3,5,7}
    //length := len(arr)
    //fmt.Println(length)

    //第二種方式,使用unsafe.Sizeof函數(shù)計(jì)算(不推薦)
    length1 := unsafe.Sizeof(arr)
    length2 := unsafe.Sizeof(arr[0])
    fmt.Println(length1 / length2)
  • 計(jì)算切片的長度
    //計(jì)算切片的長度
    //第一種方式(推薦)使用len函數(shù)
    //注意點(diǎn): 切片的長度不能使用unsafe.Sizeof函數(shù)計(jì)算
    //由于切片本質(zhì)是結(jié)構(gòu)體,所以unsafe.Sizeof計(jì)算的是結(jié)構(gòu)體的字節(jié)數(shù),不是指向數(shù)組的字節(jié)數(shù)
    sce := []int{1,3,5,6}
    length := len(sce)
    fmt.Println(length)
  • 切片與數(shù)組的傳遞
    • 數(shù)組傳遞是值傳遞
    • 切片傳遞是地址(指針)傳遞
package main

import "fmt"

func main() {
    /*
    1.數(shù)組作為函數(shù)參數(shù)是值傳遞,在函數(shù)內(nèi)部修改形參是不會影響外部實(shí)參的值
    2.切片作為函數(shù)的參數(shù)是地址傳遞(指針), 在函數(shù)內(nèi)修改形參, 會影響到函數(shù)外的實(shí)參
    */
    //arr := [4]int{1,3,4,5}
    //fmt.Println(arr)
    //change1(arr)
    //fmt.Println(arr)

    sce := []int{1,2,3,4}
    fmt.Println(sce)
    change2(sce)
    fmt.Println(sce)
    
}
//數(shù)組是值傳遞
func change1(arr [4]int)  {
arr[0] = 666
}

//切片是地址傳遞指針
func change2(sce []int)  {
    sce[0] = 666
}


可變參數(shù)

  • 可變參數(shù)底層實(shí)現(xiàn)就是切片
package main

import "fmt"

func main() {
    /*
    可變參數(shù),底層其實(shí)就是一個(gè)切片
    */
    res := sum(10,20,30)
    fmt.Println(res)

}
//可變參數(shù)底層就是一個(gè)切片
//注意點(diǎn): 當(dāng)一個(gè)函數(shù)中定義可變參數(shù)時(shí)候,可變參數(shù)只能放在形參列表的最后面
func sum(nums ...int) (res int) {
    for _, value := range nums {
        res += value
    }
    return
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惠呼,一起剝皮案震驚了整個(gè)濱河市秘狞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌频祝,老刑警劉巖辖众,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昏鹃,死亡現(xiàn)場離奇詭異外冀,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)媳溺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進(jìn)店門月幌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人悬蔽,你說我怎么就攤上這事扯躺。” “怎么了蝎困?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵录语,是天一觀的道長。 經(jīng)常有香客問我禾乘,道長澎埠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任始藕,我火速辦了婚禮蒲稳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘伍派。我一直安慰自己江耀,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布拙已。 她就那樣靜靜地躺著决记,像睡著了一般。 火紅的嫁衣襯著肌膚如雪倍踪。 梳的紋絲不亂的頭發(fā)上系宫,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天,我揣著相機(jī)與錄音建车,去河邊找鬼扩借。 笑死,一個(gè)胖子當(dāng)著我的面吹牛缤至,可吹牛的內(nèi)容都是我干的潮罪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼领斥,長吁一口氣:“原來是場噩夢啊……” “哼嫉到!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起月洛,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤何恶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后嚼黔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體细层,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惜辑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了疫赎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盛撑。...
    茶點(diǎn)故事閱讀 39,764評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖捧搞,靈堂內(nèi)的尸體忽然破棺而出抵卫,到底是詐尸還是另有隱情,我是刑警寧澤实牡,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布陌僵,位于F島的核電站,受9級特大地震影響创坞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜受葛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一题涨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧总滩,春花似錦纲堵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至冈涧,卻和暖如春茂附,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背督弓。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工营曼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人愚隧。 一個(gè)月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓蒂阱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親狂塘。 傳聞我的和親對象是個(gè)殘疾皇子录煤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 數(shù)組 和C語言一樣,Go語言中也有數(shù)組的概念, Go語言中的數(shù)組也是用于保存一組相同類型的數(shù)據(jù) 和C語言一樣,Go...
    極客江南閱讀 1,208評論 0 2
  • 新手對于數(shù)組和切片要如何區(qū)分,概念比較模糊荞胡,看看下面的說明就懂了 記住妈踊,如果在[]運(yùn)算符里指定了一個(gè)值,那么創(chuàng)建的...
    夜空中乄最亮的星閱讀 234評論 0 0
  • map(字典硝训、映射) map翻譯過來就是字典或者映射, 可以把map看做是切片的升級版切片是用來存儲一組相同類型的...
    極客江南閱讀 685評論 0 1
  • 逗留法蘭克福之時(shí)响委,恰逢其鐵人三項(xiàng)比賽新思。本是清凈周末的街頭立刻熱鬧起來。溫度高赘风,參與者熱情也高夹囚,加油助威者熱情也高。...
    舒航2018閱讀 197評論 0 0
  • 不經(jīng)意間抬頭邀窃, 圓月一語道出了繁星荸哟, 最亮的那顆星后面是我, 最亮的那顆星是你瞬捕。 阡陌交錯中花落了淚鞍历, 淚滴里映著...
    素絢閱讀 154評論 3 4