07複合數據類型

數組

	//初始化方式1
	var a1 = [3]bool{true, false, true}
	//初始化方式2,根據值確定長度
	a2 := [...]int{1, 23, 4, 5, 6}
	//初始化方式3,根據索引初始化
	a3 := [5]int{0: 1, 4: 2}
	fmt.Println(a1, a2, a3)

切片

	//1.切片的定義
	var s1 []int
	//2.切片的初始化,沒有初始化的時候值爲nil
	s1 = []int{1, 3, 4}
	//3.長度和容量
	fmt.Println(len(s1),cap(s1))
	//使用make創建切片,類型,長度,容量.如果不寫容量默認與長度相等
	s1:=make([]int,5,6)
	fmt.Println(s1)
	//使用make創建切片,類型,長度,容量.如果不寫容量默認與長度相等
	s1:=make([]int,5,6)
	//調用append的函數必須用原來的變量接收
	s1 = append(s1,1)
	fmt.Println(s1)

 注意:

  1. 切片指向了一個底層數組
  2. 切片的長度就是它元素的個數
  3. 切片的容量是底層數組從切片的第一個元素到最後一個元素的數量
  4. 切片之間是不能比較的
  5. 一個nil值的切片並沒有底層數組
  6. 判斷切片是否是空的要用len

切片的本質

切片就是一個框,框住了一塊連續的內存。切片屬於引用類型,真正的數據都是保存在底層數組裏面的。

擴容原理

  • 首先判斷,如果新申請容量(cap)大於2倍的舊容量(old.cap),最終容量(newcap)就是新申請的容量(cap)。
  • 否則判斷,如果舊切片的長度小於1024,則最終容量(newcap)就是舊容量(old.cap)的兩倍,即(newcap=doublecap),
  • 否則判斷,如果舊切片長度大於等於1024,則最終容量(newcap)從舊容量(old.cap)開始循環增加原來的1/4,即(newcap=old.cap,for {newcap += newcap/4})直到最終容量(newcap)大於等於新申請的容量(cap),即(newcap >= cap)

如果最終容量(cap)計算值溢出,則最終容量(cap)就是新申請容量(cap)。

指針

取地址&,根據地址取值*

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章